{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Useful starting lines\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "You are running Python 3. Good job :)\n"
     ]
    }
   ],
   "source": [
    "# Check the Python version\n",
    "import sys\n",
    "if sys.version.startswith(\"3.\"):\n",
    "  print(\"You are running Python 3. Good job :)\")\n",
    "else:\n",
    "  print(\"This notebook requires Python 3.\\nIf you are using Google Colab, go to Runtime > Change runtime type and choose Python 3.\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "try:\n",
    "  import google.colab\n",
    "  IN_COLAB = True\n",
    "except:\n",
    "  IN_COLAB = False\n",
    "if IN_COLAB:\n",
    "  # Clone the entire repo to access the files.\n",
    "  !git clone -l -s https://github.com/epfml/OptML_course.git cloned-repo\n",
    "  %cd cloned-repo/labs/ex02/template/"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Load the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import datetime\n",
    "from helpers import *\n",
    "\n",
    "height, weight, gender = load_data(sub_sample=False, add_outlier=False)\n",
    "x, mean_x, std_x = standardize(height)\n",
    "b, A = build_model_data(x, weight)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "((10000,), (10000, 2))"
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.shape, A.shape\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Least Squares Estimation\n",
    "Least squares estimation is one of the fundamental machine learning algorithms. Given an $ n \\times d $ matrix $A$ and a $ n \\times 1$ vector $b$, the goal is to find a vector $x \\in \\mathbb{R}^d$ which minimizes the objective function $$f(x) = \\frac{1}{2n} \\sum_{i=1}^{n} (a_i^\\top x - b_i)^2 = \\frac{1}{2n} \\|Ax - b\\|^2 $$\n",
    "\n",
    "In this exercise, we will try to fit $x$ using Least Squares Estimation. \n",
    "\n",
    "One can see the function is $L$ smooth with $L = \\frac1n\\|A\\|^2$ (Corollary 2.5)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Computing the Objective Function\n",
    "Fill in the `calculate_objective` function below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def calculate_objective(Axmb):\n",
    "    \"\"\"Calculate the mean squared error for vector Axmb = Ax - b.\"\"\"\n",
    "    # ***************************************************\n",
    "    # INSERT YOUR CODE HERE\n",
    "    # TODO: compute mean squared error\n",
    "    mse = (Axmb ** 2).mean()/2\n",
    "    return mse\n",
    "    # ***************************************************\n",
    "    raise NotImplementedError"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Compute smoothness constant $L$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To compute the spectral norm of A you can use np.linalg.norm(A, 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def calculate_L(b, A):\n",
    "    \"\"\"Calculate the smoothness constant for f\"\"\"\n",
    "    # ***************************************************\n",
    "    # INSERT YOUR CODE HERE\n",
    "    # TODO: compute ||A.T*A||\n",
    "    ATA = np.dot(A.T, A)\n",
    "    norm_ATA = np.linalg.norm(ATA, 2)\n",
    "    # ***************************************************\n",
    "    # raise NotImplementedError\n",
    "    # ***************************************************\n",
    "    # INSERT YOUR CODE HERE\n",
    "    # TODO: compute L = smoothness constant of f\n",
    "    L = norm_ATA / len(b)\n",
    "    # ***************************************************\n",
    "    # raise NotImplementedError\n",
    "    return L"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Gradient Descent"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Please fill in the functions `compute_gradient` below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def compute_gradient(b, A, x):\n",
    "    \"\"\"\n",
    "    Compute the gradient.\n",
    "    b: ground truth\n",
    "    A: parameters\n",
    "    x: variable\n",
    "    \"\"\"\n",
    "    # ***************************************************\n",
    "    # INSERT YOUR CODE HERE\n",
    "    # TODO: compute gradient and objective\n",
    "    Ax = A.dot(x)\n",
    "    Axmb = Ax - b\n",
    "    grad = A.T.dot(Axmb) * 2 / len(b)\n",
    "    # ***************************************************\n",
    "    # raise NotImplementedError\n",
    "    return grad, Axmb"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Please fill in the functions `gradient_descent` below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gradient_descent(b, A, initial_x, max_iters, gamma):\n",
    "    \"\"\"Gradient descent algorithm.\"\"\"\n",
    "    # Define parameters to store x and objective func. values\n",
    "    xs = [initial_x]\n",
    "    objectives = []\n",
    "    x = initial_x\n",
    "    for n_iter in range(max_iters):\n",
    "        # ***************************************************\n",
    "        # INSERT YOUR CODE HERE\n",
    "        # TODO: compute gradient and objective function\n",
    "        grad, Axmb = compute_gradient(b, A, x)\n",
    "        obj = calculate_objective(Axmb)\n",
    "        # ***************************************************\n",
    "        # raise NotImplementedError\n",
    "        # ***************************************************\n",
    "        # INSERT YOUR CODE HERE\n",
    "        # TODO: update x by a gradient descent step\n",
    "        x = x - gamma * grad\n",
    "        # ***************************************************\n",
    "        # raise NotImplementedError\n",
    "        # store x and objective function value\n",
    "        xs.append(x)\n",
    "        objectives.append(obj)\n",
    "        print(\"Gradient Descent({bi}/{ti}): objective={l}\".format(\n",
    "              bi=n_iter, ti=max_iters - 1, l=obj))\n",
    "\n",
    "    return objectives, xs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Test your gradient descent function with a naive step size through gradient descent demo shown below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Gradient Descent(0/49): objective=2792.2367127591674\n",
      "Gradient Descent(1/49): objective=1792.5704157986504\n",
      "Gradient Descent(2/49): objective=1152.7839857439167\n",
      "Gradient Descent(3/49): objective=743.320670508885\n",
      "Gradient Descent(4/49): objective=481.2641487584641\n",
      "Gradient Descent(5/49): objective=313.54797483819635\n",
      "Gradient Descent(6/49): objective=206.20962352922444\n",
      "Gradient Descent(7/49): objective=137.51307869148266\n",
      "Gradient Descent(8/49): objective=93.54728999532747\n",
      "Gradient Descent(9/49): objective=65.40918522978812\n",
      "Gradient Descent(10/49): objective=47.40079817984297\n",
      "Gradient Descent(11/49): objective=35.87543046787814\n",
      "Gradient Descent(12/49): objective=28.499195132220613\n",
      "Gradient Descent(13/49): objective=23.77840451739977\n",
      "Gradient Descent(14/49): objective=20.757098523914458\n",
      "Gradient Descent(15/49): objective=18.823462688083843\n",
      "Gradient Descent(16/49): objective=17.58593575315223\n",
      "Gradient Descent(17/49): objective=16.79391851479602\n",
      "Gradient Descent(18/49): objective=16.287027482248025\n",
      "Gradient Descent(19/49): objective=15.962617221417322\n",
      "Gradient Descent(20/49): objective=15.754994654485667\n",
      "Gradient Descent(21/49): objective=15.622116211649415\n",
      "Gradient Descent(22/49): objective=15.537074008234208\n",
      "Gradient Descent(23/49): objective=15.482646998048475\n",
      "Gradient Descent(24/49): objective=15.447813711529607\n",
      "Gradient Descent(25/49): objective=15.42552040815753\n",
      "Gradient Descent(26/49): objective=15.411252693999401\n",
      "Gradient Descent(27/49): objective=15.402121356938203\n",
      "Gradient Descent(28/49): objective=15.396277301219033\n",
      "Gradient Descent(29/49): objective=15.392537105558763\n",
      "Gradient Descent(30/49): objective=15.390143380336196\n",
      "Gradient Descent(31/49): objective=15.388611396193749\n",
      "Gradient Descent(32/49): objective=15.387630926342583\n",
      "Gradient Descent(33/49): objective=15.387003425637836\n",
      "Gradient Descent(34/49): objective=15.3866018251868\n",
      "Gradient Descent(35/49): objective=15.386344800898136\n",
      "Gradient Descent(36/49): objective=15.386180305353388\n",
      "Gradient Descent(37/49): objective=15.386075028204756\n",
      "Gradient Descent(38/49): objective=15.386007650829628\n",
      "Gradient Descent(39/49): objective=15.385964529309543\n",
      "Gradient Descent(40/49): objective=15.385936931536692\n",
      "Gradient Descent(41/49): objective=15.385919268962068\n",
      "Gradient Descent(42/49): objective=15.385907964914306\n",
      "Gradient Descent(43/49): objective=15.385900730323739\n",
      "Gradient Descent(44/49): objective=15.385896100185777\n",
      "Gradient Descent(45/49): objective=15.385893136897483\n",
      "Gradient Descent(46/49): objective=15.385891240392972\n",
      "Gradient Descent(47/49): objective=15.385890026630086\n",
      "Gradient Descent(48/49): objective=15.38588924982184\n",
      "Gradient Descent(49/49): objective=15.385888752664561\n",
      "Gradient Descent: execution time=0.004 seconds\n"
     ]
    }
   ],
   "source": [
    "# from gradient_descent import *\n",
    "from plots import gradient_descent_visualization\n",
    "\n",
    "# Define the parameters of the algorithm.\n",
    "max_iters = 50\n",
    "\n",
    "gamma = 0.1\n",
    "\n",
    "# Initialization\n",
    "x_initial = np.zeros(A.shape[1])\n",
    "\n",
    "# Start gradient descent.\n",
    "start_time = datetime.datetime.now()\n",
    "gradient_objectives_naive, gradient_xs_naive = gradient_descent(b, A, x_initial, max_iters, gamma)\n",
    "end_time = datetime.datetime.now()\n",
    "\n",
    "# Print result\n",
    "exection_time = (end_time - start_time).total_seconds()\n",
    "print(\"Gradient Descent: execution time={t:.3f} seconds\".format(t=exection_time))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Time Visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "interactive(children=(IntSlider(value=1, description='n_iter', max=51, min=1), Output()), _dom_classes=('widge…",
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "d7b2bce620f54e638ceabe95f5fb0036"
      }
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": "<function __main__.plot_figure(n_iter)>"
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from ipywidgets import IntSlider, interact\n",
    "from grid_search import *\n",
    "\n",
    "def plot_figure(n_iter):\n",
    "    # Generate grid data for visualization (parameters to be swept and best combination)\n",
    "    grid_x0, grid_x1 = generate_w(num_intervals=10)\n",
    "    grid_objectives = grid_search(b, A, grid_x0, grid_x1)\n",
    "    obj_star, x0_star, x1_star = get_best_parameters(grid_x0, grid_x1, grid_objectives)\n",
    "    \n",
    "    fig = gradient_descent_visualization(\n",
    "        gradient_objectives_naive, gradient_xs_naive, grid_objectives, grid_x0, grid_x1, mean_x, std_x, height, weight, n_iter)\n",
    "    fig.set_size_inches(10.0, 6.0)\n",
    "    print(fig)\n",
    "\n",
    "interact(plot_figure, n_iter=IntSlider(min=1, max=len(gradient_xs_naive)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Try doing gradient descent with a better learning rate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.0000000000000033\n",
      "Gradient Descent(0/49): objective=2792.2367127591674\n",
      "Gradient Descent(1/49): objective=15.3858878688294\n",
      "Gradient Descent(2/49): objective=15.3858878688294\n",
      "Gradient Descent(3/49): objective=15.3858878688294\n",
      "Gradient Descent(4/49): objective=15.3858878688294\n",
      "Gradient Descent(5/49): objective=15.3858878688294\n",
      "Gradient Descent(6/49): objective=15.3858878688294\n",
      "Gradient Descent(7/49): objective=15.3858878688294\n",
      "Gradient Descent(8/49): objective=15.3858878688294\n",
      "Gradient Descent(9/49): objective=15.3858878688294\n",
      "Gradient Descent(10/49): objective=15.3858878688294\n",
      "Gradient Descent(11/49): objective=15.3858878688294\n",
      "Gradient Descent(12/49): objective=15.3858878688294\n",
      "Gradient Descent(13/49): objective=15.3858878688294\n",
      "Gradient Descent(14/49): objective=15.3858878688294\n",
      "Gradient Descent(15/49): objective=15.3858878688294\n",
      "Gradient Descent(16/49): objective=15.3858878688294\n",
      "Gradient Descent(17/49): objective=15.3858878688294\n",
      "Gradient Descent(18/49): objective=15.3858878688294\n",
      "Gradient Descent(19/49): objective=15.3858878688294\n",
      "Gradient Descent(20/49): objective=15.3858878688294\n",
      "Gradient Descent(21/49): objective=15.3858878688294\n",
      "Gradient Descent(22/49): objective=15.3858878688294\n",
      "Gradient Descent(23/49): objective=15.3858878688294\n",
      "Gradient Descent(24/49): objective=15.3858878688294\n",
      "Gradient Descent(25/49): objective=15.3858878688294\n",
      "Gradient Descent(26/49): objective=15.3858878688294\n",
      "Gradient Descent(27/49): objective=15.3858878688294\n",
      "Gradient Descent(28/49): objective=15.3858878688294\n",
      "Gradient Descent(29/49): objective=15.3858878688294\n",
      "Gradient Descent(30/49): objective=15.3858878688294\n",
      "Gradient Descent(31/49): objective=15.3858878688294\n",
      "Gradient Descent(32/49): objective=15.3858878688294\n",
      "Gradient Descent(33/49): objective=15.3858878688294\n",
      "Gradient Descent(34/49): objective=15.3858878688294\n",
      "Gradient Descent(35/49): objective=15.3858878688294\n",
      "Gradient Descent(36/49): objective=15.3858878688294\n",
      "Gradient Descent(37/49): objective=15.3858878688294\n",
      "Gradient Descent(38/49): objective=15.3858878688294\n",
      "Gradient Descent(39/49): objective=15.3858878688294\n",
      "Gradient Descent(40/49): objective=15.3858878688294\n",
      "Gradient Descent(41/49): objective=15.3858878688294\n",
      "Gradient Descent(42/49): objective=15.3858878688294\n",
      "Gradient Descent(43/49): objective=15.3858878688294\n",
      "Gradient Descent(44/49): objective=15.3858878688294\n",
      "Gradient Descent(45/49): objective=15.3858878688294\n",
      "Gradient Descent(46/49): objective=15.3858878688294\n",
      "Gradient Descent(47/49): objective=15.3858878688294\n",
      "Gradient Descent(48/49): objective=15.3858878688294\n",
      "Gradient Descent(49/49): objective=15.3858878688294\n",
      "Gradient Descent: execution time=0.000 seconds\n"
     ]
    }
   ],
   "source": [
    "# Define the parameters of the algorithm.\n",
    "max_iters = 50\n",
    "\n",
    "# ***************************************************\n",
    "# INSERT YOUR CODE HERE\n",
    "# TODO: a better learning rate using the smoothness of f\n",
    "# ***************************************************\n",
    "print(calculate_L(b, A))\n",
    "gamma = 1/2/calculate_L(b, A)\n",
    "# raise NotImplementedError\n",
    "\n",
    "# Initialization\n",
    "x_initial = np.zeros(A.shape[1])\n",
    "\n",
    "# Start gradient descent.\n",
    "start_time = datetime.datetime.now()\n",
    "gradient_objectives, gradient_xs = gradient_descent(b, A, x_initial, max_iters, gamma)\n",
    "end_time = datetime.datetime.now()\n",
    "\n",
    "# Print result\n",
    "exection_time = (end_time - start_time).total_seconds()\n",
    "print(\"Gradient Descent: execution time={t:.3f} seconds\".format(t=exection_time))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Time visualization with a better learning rate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "interactive(children=(IntSlider(value=1, description='n_iter', max=51, min=1), Output()), _dom_classes=('widge…",
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "4d357bed65a84f8e98c18b3f3a1e2d8d"
      }
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": "<function __main__.plot_figure(n_iter)>"
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def plot_figure(n_iter):\n",
    "    # Generate grid data for visualization (parameters to be swept and best combination)\n",
    "    grid_x0, grid_x1 = generate_w(num_intervals=10)\n",
    "    grid_objectives = grid_search(b, A, grid_x0, grid_x1)\n",
    "    obj_star, x0_star, x1_star = get_best_parameters(grid_x0, grid_x1, grid_objectives)\n",
    "    \n",
    "    fig = gradient_descent_visualization(\n",
    "        gradient_objectives, gradient_xs, grid_objectives, grid_x0, grid_x1, mean_x, std_x, height, weight, n_iter)\n",
    "    fig.set_size_inches(10.0, 6.0)\n",
    "\n",
    "interact(plot_figure, n_iter=IntSlider(min=1, max=len(gradient_xs)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Loading more complex data\n",
    "The data is taken from https://archive.ics.uci.edu/ml/datasets/Concrete+Compressive+Strength "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = np.loadtxt(\"Concrete_Data.csv\",delimiter=\",\")\n",
    "\n",
    "A = data[:,:-1]\n",
    "b = data[:,-1]\n",
    "A, mean_A, std_A = standardize(A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "((1030,), (1030, 8))"
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.shape, A.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Running gradient descent"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Assuming bounded gradients\n",
    "Assume we are moving in a bounded region $\\|x\\| \\leq 25$ containing all iterates (and we assume $\\|x-x^\\star\\| \\leq 25$ as well, for simplicity). Then by $\\nabla f(x) = \\frac{1}{n}A^\\top (Ax - b)$, one can see that $f$ is Lipschitz over that bounded region, with Lipschitz constant $\\|\\nabla f(x)\\| \\leq \\frac{1}{n} (\\|A^\\top A\\|\\|x\\| + \\|A^\\top b\\|)$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# ***************************************************\n",
    "# INSERT YOUR CODE HERE\n",
    "# TODO: Compute the bound on the gradient norm\n",
    "# ***************************************************\n",
    "grad_norm_bound = 1/len(b) * (np.linalg.norm(A.T @ A) * 25 + 1/len(b) * np.linalg.norm(A.T @ b))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Fill in the learning rate assuming bounded gradients"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "85.1261585584139\n",
      "Gradient Descent(0/49): objective=780.8686016504854\n",
      "Gradient Descent(1/49): objective=776.6162192237433\n",
      "Gradient Descent(2/49): objective=772.5995027794503\n",
      "Gradient Descent(3/49): objective=768.8047690913729\n",
      "Gradient Descent(4/49): objective=765.2191573447385\n",
      "Gradient Descent(5/49): objective=761.8305781293004\n",
      "Gradient Descent(6/49): objective=758.6276657025048\n",
      "Gradient Descent(7/49): objective=755.5997333047145\n",
      "Gradient Descent(8/49): objective=752.7367313237096\n",
      "Gradient Descent(9/49): objective=750.0292081198229\n",
      "Gradient Descent(10/49): objective=747.4682733361467\n",
      "Gradient Descent(11/49): objective=745.045563530382\n",
      "Gradient Descent(12/49): objective=742.753209976137\n",
      "Gradient Descent(13/49): objective=740.5838084919036\n",
      "Gradient Descent(14/49): objective=738.5303911656166\n",
      "Gradient Descent(15/49): objective=736.586399851664\n",
      "Gradient Descent(16/49): objective=734.745661325559\n",
      "Gradient Descent(17/49): objective=733.0023639892128\n",
      "Gradient Descent(18/49): objective=731.351036026945\n",
      "Gradient Descent(19/49): objective=729.7865249190439\n",
      "Gradient Descent(20/49): objective=728.3039782259077\n",
      "Gradient Descent(21/49): objective=726.8988255615715\n",
      "Gradient Descent(22/49): objective=725.5667616808084\n",
      "Gradient Descent(23/49): objective=724.303730608989\n",
      "Gradient Descent(24/49): objective=723.1059107485517\n",
      "Gradient Descent(25/49): objective=721.9697009002665\n",
      "Gradient Descent(26/49): objective=720.8917071415261\n",
      "Gradient Descent(27/49): objective=719.8687305076572\n",
      "Gradient Descent(28/49): objective=718.8977554257609\n",
      "Gradient Descent(29/49): objective=717.9759388538635\n",
      "Gradient Descent(30/49): objective=717.1006000812127\n",
      "Gradient Descent(31/49): objective=716.2692111484006\n",
      "Gradient Descent(32/49): objective=715.4793878486547\n",
      "Gradient Descent(33/49): objective=714.7288812741208\n",
      "Gradient Descent(34/49): objective=714.0155698732692\n",
      "Gradient Descent(35/49): objective=713.3374519877307\n",
      "Gradient Descent(36/49): objective=712.6926388388757\n",
      "Gradient Descent(37/49): objective=712.0793479363473\n",
      "Gradient Descent(38/49): objective=711.4958968825144\n",
      "Gradient Descent(39/49): objective=710.9406975484633\n",
      "Gradient Descent(40/49): objective=710.412250598684\n",
      "Gradient Descent(41/49): objective=709.909140343049\n",
      "Gradient Descent(42/49): objective=709.4300298960279\n",
      "Gradient Descent(43/49): objective=708.9736566243405\n",
      "Gradient Descent(44/49): objective=708.5388278654292\n",
      "Gradient Descent(45/49): objective=708.1244169002349\n",
      "Gradient Descent(46/49): objective=707.7293591647913\n",
      "Gradient Descent(47/49): objective=707.3526486861151\n",
      "Gradient Descent(48/49): objective=706.9933347287792\n",
      "Gradient Descent(49/49): objective=706.6505186393963\n",
      "Gradient Descent: execution time=0.000 seconds\n"
     ]
    }
   ],
   "source": [
    "max_iters = 50\n",
    "\n",
    "# ***************************************************\n",
    "# INSERT YOUR CODE HERE\n",
    "# TODO: Compute learning rate based on bounded gradient\n",
    "# ***************************************************\n",
    "print(grad_norm_bound )\n",
    "gamma = 1/grad_norm_bound\n",
    "\n",
    "# Initialization\n",
    "x_initial = np.zeros(A.shape[1])\n",
    "\n",
    "# Start gradient descent.\n",
    "start_time = datetime.datetime.now()\n",
    "bd_gradient_objectives, bd_gradient_xs = gradient_descent(b, A, x_initial, max_iters, gamma)\n",
    "end_time = datetime.datetime.now()\n",
    "\n",
    "\n",
    "# Print result\n",
    "exection_time = (end_time - start_time).total_seconds()\n",
    "print(\"Gradient Descent: execution time={t:.3f} seconds\".format(t=exection_time))\n",
    "\n",
    "# Averaging the iterates as is the case for bounded gradients case\n",
    "bd_gradient_objectives_averaged = []\n",
    "for i in range(len(bd_gradient_xs)):\n",
    "    if i > 0:\n",
    "        bd_gradient_xs[i] = (i * bd_gradient_xs[i-1] + bd_gradient_xs[i])/(i + 1)\n",
    "    grad, err = compute_gradient(b, A, bd_gradient_xs[i])\n",
    "    # obj = calculate_mse(err)\n",
    "    obj = np.linalg.norm(err)**2 / len(err) /2\n",
    "    bd_gradient_objectives_averaged.append(obj)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Gradient descent using smoothness\n",
    "Fill in the learning rate using smoothness of the function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.280099361352307\n",
      "Gradient Descent(0/49): objective=780.8686016504854\n",
      "Gradient Descent(1/49): objective=721.5052560260676\n",
      "Gradient Descent(2/49): objective=706.7843584315374\n",
      "Gradient Descent(3/49): objective=702.1659603718192\n",
      "Gradient Descent(4/49): objective=700.3195706210596\n",
      "Gradient Descent(5/49): objective=699.3927282552014\n",
      "Gradient Descent(6/49): objective=698.8265138747602\n",
      "Gradient Descent(7/49): objective=698.4252460378514\n",
      "Gradient Descent(8/49): objective=698.1121802865196\n",
      "Gradient Descent(9/49): objective=697.8540419775694\n",
      "Gradient Descent(10/49): objective=697.6346924802035\n",
      "Gradient Descent(11/49): objective=697.4451956987403\n",
      "Gradient Descent(12/49): objective=697.2798771098778\n",
      "Gradient Descent(13/49): objective=697.134694345026\n",
      "Gradient Descent(14/49): objective=697.0065306304227\n",
      "Gradient Descent(15/49): objective=696.8928669366339\n",
      "Gradient Descent(16/49): objective=696.7916143488984\n",
      "Gradient Descent(17/49): objective=696.701017217532\n",
      "Gradient Descent(18/49): objective=696.6195897256094\n",
      "Gradient Descent(19/49): objective=696.5460698345364\n",
      "Gradient Descent(20/49): objective=696.4793834248535\n",
      "Gradient Descent(21/49): objective=696.4186151939681\n",
      "Gradient Descent(22/49): objective=696.3629844974911\n",
      "Gradient Descent(23/49): objective=696.3118250564795\n",
      "Gradient Descent(24/49): objective=696.2645678090805\n",
      "Gradient Descent(25/49): objective=696.220726375205\n",
      "Gradient Descent(26/49): objective=696.1798847171167\n",
      "Gradient Descent(27/49): objective=696.141686656003\n",
      "Gradient Descent(28/49): objective=696.1058269617541\n",
      "Gradient Descent(29/49): objective=696.072043778206\n",
      "Gradient Descent(30/49): objective=696.0401121828639\n",
      "Gradient Descent(31/49): objective=696.0098387107206\n",
      "Gradient Descent(32/49): objective=695.9810566975377\n",
      "Gradient Descent(33/49): objective=695.9536223197188\n",
      "Gradient Descent(34/49): objective=695.9274112263599\n",
      "Gradient Descent(35/49): objective=695.9023156747344\n",
      "Gradient Descent(36/49): objective=695.8782420937702\n",
      "Gradient Descent(37/49): objective=695.8551090113992\n",
      "Gradient Descent(38/49): objective=695.8328452912637\n",
      "Gradient Descent(39/49): objective=695.8113886324364\n",
      "Gradient Descent(40/49): objective=695.7906842927656\n",
      "Gradient Descent(41/49): objective=695.770684002349\n",
      "Gradient Descent(42/49): objective=695.7513450386715\n",
      "Gradient Descent(43/49): objective=695.7326294392002\n",
      "Gradient Descent(44/49): objective=695.7145033308639\n",
      "Gradient Descent(45/49): objective=695.6969363589233\n",
      "Gradient Descent(46/49): objective=695.6799012003625\n",
      "Gradient Descent(47/49): objective=695.6633731491596\n",
      "Gradient Descent(48/49): objective=695.6473297626892\n",
      "Gradient Descent(49/49): objective=695.6317505601199\n",
      "Gradient Descent: execution time=0.004 seconds\n"
     ]
    }
   ],
   "source": [
    "max_iters = 50\n",
    "\n",
    "\n",
    "# ***************************************************\n",
    "# INSERT YOUR CODE HERE\n",
    "# TODO: a better learning rate using the smoothness of f\n",
    "# ***************************************************\n",
    "print(calculate_L(b, A))\n",
    "gamma = 1/2/calculate_L(b, A)\n",
    "\n",
    "# Initialization\n",
    "x_initial = np.zeros(A.shape[1])\n",
    "\n",
    "# Start gradient descent.\n",
    "start_time = datetime.datetime.now()\n",
    "gradient_objectives, gradient_xs = gradient_descent(b, A, x_initial, max_iters, gamma)\n",
    "end_time = datetime.datetime.now()\n",
    "\n",
    "# Print result\n",
    "exection_time = (end_time - start_time).total_seconds()\n",
    "print(\"Gradient Descent: execution time={t:.3f} seconds\".format(t=exection_time))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Plotting the Evolution of the Objective Function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 800x800 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArcAAAKnCAYAAACcS2XsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAADaQklEQVR4nOzddVhU6RcH8O/QPXQoCKKiWIBigIGBuQauawco666Nsdba3Z1rLK61uuYaa2GtioGIjYgKYqBYgKjknN8f8+MuQwgocAc4n+eZxzs3z515Zzy884aEiAiMMcYYY4yVACpiB8AYY4wxxlhB4eSWMcYYY4yVGJzcMsYYY4yxEoOTW8YYY4wxVmJwcssYY4wxxkoMTm4ZY4wxxliJwcktY4wxxhgrMTi5ZYwxxhhjJYaa2AEoA5lMhhcvXkBfXx8SiUTscBhjjDHGWCZEhA8fPqBMmTJQUcm5fpaTWwAvXryAjY2N2GEwxhhjjLFcPH36FNbW1jlu5+QWgL6+PgD5i2VgYCByNIwxxhhjLLP4+HjY2NgIeVtOOLkFhKYIBgYGnNwyxhhjjCmx3JqQcocyxhhjjDFWYnByyxhjjDHGSgxObhljjDHGWInBbW7ZVyMipKamIi0tTexQGGOMMVbMqaqqQk1N7ZuHZeXkln2V5ORkREdH49OnT2KHwhhjjLESQkdHB1ZWVtDQ0Pjqc3Byy/JNJpMhIiICqqqqKFOmDDQ0NHjyC8YYY4x9NSJCcnIyXr9+jYiICFSqVOmLEzV8CSe3LN+Sk5Mhk8lgY2MDHR0dscNhjDHGWAmgra0NdXV1PHnyBMnJydDS0vqq83CHMvbVvvYvKsYYY4yx7BREbsHZCWOMMcYYKzE4uWWsEE2bNg3Ozs7Ccx8fH3h5eYkWT2bKFo9YJBIJDhw48MV9+LXKnyZNmmDEiBFih8EYK4U4uWWsCC1fvhybN28u0HNmTqBLsrNnz0IikSA2NrZAzxsdHY02bdoAACIjIyGRSHDjxo0COW/Pnj1RuXJlqKiofDHZmzZtGrp37w4AsLOzw7Jly775+oB4Sea+ffswc+bMIr8uY4xxcstYLpKTkwvsXFKpFIaGhgV2PlYwLC0toampWeDnTUpKgpmZGSZOnAgnJ6cv7nvw4EF07NixwGMQi7GxMfT19cUOgzFWCnFyy0qVDx8+oFevXtDV1YWVlRWWLl2apWbLzs4Os2bNgo+PD6RSKQYMGAAAGDduHBwcHKCjowN7e3tMnjwZKSkpCuefN28eLCwsoK+vD19fXyQmJipsz/zTNhFhwYIFsLe3h7a2NpycnLBnzx5he3pN5alTp+Dq6godHR24u7sjLCwMALB582ZMnz4dN2/ehEQigUQiybFmOC0tDaNGjYKhoSFMTEwwduxYEJHCPrnF8/79e/Tq1QtmZmbQ1tZGpUqV4O/vL2x/9uwZunfvDmNjY+jq6sLV1RVXrlwRth86dAi1a9eGlpYW7O3tMX36dKSmpgrbJRIJNm7ciE6dOkFHRweVKlXCwYMHAchrVJs2bQoAMDIygkQigY+PT5b7JCKYmZlh7969wjpnZ2eYm5sLzy9dugR1dXUkJCQI101vllC+fHkAgIuLCyQSCZo0aaJw/kWLFsHKygomJiYYMmRIljKQkZ2dHZYvX46+fftCKpXmuN/Tp09x584dofY4v9asWYNKlSpBS0sLFhYW+OGHHwDIy9u5c+ewfPlyoXxERkYCAO7du4e2bdtCT08PFhYW6NOnD968eSOcs0mTJhg6dCiGDh0qlJlJkyYplJmcrpt+fPrnKr0cZ35kfP9yKxuMMZZnxCguLo4AUFxcnNihFAufP3+me/fu0efPn/9bKZMRJSSI85DJ8hz7jz/+SLa2thQQEEC3b9+mTp06kb6+Pvn5+Qn72NrakoGBAS1cuJDCw8MpPDyciIhmzpxJFy9epIiICDp48CBZWFjQ/PnzheN27dpFGhoatGHDBrp//z5NnDiR9PX1ycnJSdjH29ubOnbsKDz/9ddfqUqVKnTs2DF69OgR+fv7k6amJp09e5aIiM6cOUMAqF69enT27Fm6e/cuNWrUiNzd3YmI6NOnTzR69GiqVq0aRUdHU3R0NH369Cnbe58/fz5JpVLas2cP3bt3j3x9fUlfXz9f8QwZMoScnZ0pKCiIIiIi6OTJk3Tw4EEiIvrw4QPZ29tTo0aN6Pz58xQeHk67du2iwMBAIiI6duwYGRgY0ObNm+nRo0d04sQJsrOzo2nTpgnXB0DW1ta0Y8cOCg8Pp+HDh5Oenh69ffuWUlNTae/evQSAwsLCKDo6mmJjY7O91++//56GDh1KRETv3r0jdXV1MjQ0pLt37xIR0Zw5c6hevXoK192/fz8REV29epUAUEBAAEVHR9Pbt2+F987AwIAGDhxIoaGhdOjQIdLR0aH169dnG0NmHh4eCuUso1WrVlHz5s2F57a2trR06dI8nTcoKIhUVVVpx44dFBkZSdevX6fly5cTEVFsbCy5ubnRgAEDhPKRmppKL168IFNTU5owYQKFhobS9evXqUWLFtS0aVOFePX09MjPz4/u379P27ZtU7jfL1038/0mJSUJ14+OjqbTp0+TlpYWbdq0iYjyVjYYY6VDtjnG/+U1X+Pklji5za9sC15CAhEgziMhIU9xx8fHk7q6Ou3evVtYFxsbSzo6OlmSWy8vr1zPt2DBAqpdu7bw3M3NjQYOHKiwT7169XJMbhMSEkhLS0tI/tL5+vpSjx49iOi/5DYgIEDYfuTIEQIgvP5Tp05VuEZOrKysaN68ecLzlJQUsra2zlc87du3p379+mV7/t9++4309fWFZDCzRo0a0Zw5cxTWbd26laysrITnAGjSpEnC84SEBJJIJHT06FEi+u/1eP/+/RfvdcWKFVS9enUiIjpw4AC5urrS999/T6tXryYiopYtW9K4ceMUrpue3EZERBAACgkJUTint7c32draUmpqqrCuS5cu1K1bty/Gku5LyW2LFi1oxYoVwvP8JLd79+4lAwMDio+Pz/N1J0+eTC1btlRY9/TpU+EPh/TjHB0dSZbhj8dx48aRo6PjV1+XiOjNmzdUoUIFGjx4sLAuL2WDMVY6FERyy80SWKnx+PFjpKSkoG7dusI6qVSKypUrZ9nX1dU1y7o9e/agYcOGsLS0hJ6eHiZPnoyoqChhe2hoKNzc3BSOyfw8o3v37iExMREtWrSAnp6e8NiyZQsePXqksG/NmjWFZSsrKwBATExMLnf8n7i4OERHRyvEo6ampnCfeYln0KBB2LlzJ5ydnTF27FgEBgYKx9+4cQMuLi4wNjbONobg4GDMmDFD4dwDBgzIMo1zxnvV1dWFvr5+vu4VkP8kfvfuXbx58wbnzp1DkyZN0KRJE5w7dw6pqakIDAyEh4dHvs4JANWqVYOqqqrw3MrKKt+xZRYfH49z586hQ4cOX3V8ixYtYGtrC3t7e/Tp0wfbt2/PdVrs4OBgnDlzRuG9qFKlCgAolL369esrzD7o5uaG8PBwpKWlfdV1U1JS0LlzZ5QrVw7Lly9XiCcvZYMxxvKCZyhjBUNHB/h/+0VRrp0H9P+2gpmnCk5fn5Gurq7C88uXL6N79+6YPn06WrVqBalUip07d2Lx4sVfGbR8GmMAOHLkCMqWLauwLXPnJnV1dWE5Pf704wtKXuJp06YNnjx5giNHjiAgIADNmzfHkCFDsGjRImhra+d6/unTp+P777/Psi3jLDQZ7xWQ329+77V69eowMTHBuXPncO7cOcyYMQM2NjaYPXs2goKC8PnzZzRs2DBf5yyo2DI7evQoHB0dYWtr+1XH6+vr4/r16zh79ixOnDiBKVOmYNq0aQgKCsqx86JMJkP79u0xf/78LNvS/3gqjOsOGjQIUVFRCAoKgpraf//95LVsMMZYXnByywqGRAJkSgiVTYUKFaCuro6rV6/CxsYGgLzWLDw8PNdavIsXL8LW1hYTJ04U1j158kRhH0dHR1y+fBl9+/YV1l2+fDnHc1atWhWampqIior6qlrEdBoaGkhLS/viPlKpFFZWVrh8+TIaN24MAEhNTUVwcDBq1aqVr3jMzMzg4+MDHx8fNGrUCGPGjMGiRYtQs2ZNbNy4Ee/evcu29rZWrVoICwtDxYoVv+leAeR6vxKJBI0bN8bff/+NO3fuoFGjRtDX10dKSgrWrVuHWrVq5diTP6/XKCh///33V9faplNTU4Onpyc8PT0xdepUGBoa4vTp0/j++++zLR+1atXC3r17YWdnp5BkZpa5/F6+fBmVKlUSaq+/dN3MlixZgl27duHSpUswMTHJEs+3lg3GGEvHyS0rNfT19eHt7Y0xY8bA2NgY5ubmmDp1KlRUVLLU5mZWsWJFREVFYefOnahTpw6OHDmC/fv3K+zj5+cHb29vuLq6omHDhti+fTvu3r0Le3v7HOP55ZdfMHLkSMhkMjRs2BDx8fEIDAyEnp4evL2983RfdnZ2iIiIwI0bN2BtbQ19ff1sh7Xy8/PDvHnzUKlSJTg6OmLJkiUK48XmJZ4pU6agdu3aqFatGpKSknD48GE4OjoCAHr06IE5c+bAy8sLc+fOhZWVFUJCQlCmTBm4ublhypQpaNeuHWxsbNClSxeoqKjg1q1buH37NmbNmpWne7W1tYVEIsHhw4fRtm1baGtrQ09PL9t9mzRpgpEjR8LFxQUGBgYAgMaNG2P79u0YNWpUjtcwNzeHtrY2jh07Bmtra2hpaX1xpIPcpI+Xm5CQgNevX+PGjRvQ0NBA1apVkZqaiqNHjyIgICDLcc+fP88y1m65cuWy/OFw+PBhPH78GI0bN4aRkRH++ecfyGQyobmNnZ0drly5gsjISOjp6cHY2BhDhgzBhg0b0KNHD4wZMwampqZ4+PAhdu7ciQ0bNgjJ69OnTzFq1Cj8/PPPuH79OlauXCn8WpHbdTMKCAjA2LFjsXr1apiamuLly5cA5PPIS6XSAikbjDEmKJzmwMULdyjLny819lZ28fHx1LNnT9LR0SFLS0tasmQJ1a1bl8aPHy/sk1NnnjFjxpCJiQnp6elRt27daOnSpSSVShX2mT17NpmampKenh55e3vT2LFjvzhagkwmo+XLl1PlypVJXV2dzMzMqFWrVnTu3Dkiyr4DVUhICAGgiIgIIiJKTEykzp07k6GhIQEgf3//bO89JSWF/Pz8yMDAgAwNDWnUqFHUt2/ffMUzc+ZMcnR0JG1tbTI2NqaOHTvS48ePheMjIyOpc+fOZGBgQDo6OuTq6kpXrlwRth87dozc3d1JW1ubDAwMqG7dugqjDSBDx650UqlU4Z5mzJhBlpaWJJFIyNvbO9t7JSK6ffs2AaBffvlFWLd06VICQIcPH1bYN/N1N2zYQDY2NqSiokIeHh5ElPW9IyLy8/MTtucEQJaHra0tEREFBASQtbV1lmNsbW2zPS679/b8+fPk4eFBRkZGpK2tTTVr1qRdu3YJ28PCwqh+/fqkra2tUG4ePHhAnTp1IkNDQ9LW1qYqVarQiBEjhA5kHh4eNHjwYBo4cCAZGBiQkZERjR8/Xtie23UzdiibOnVqtveT8f3LrWwwxkqHguhQJiHKpsFhKRMfHw+pVIq4uDihhoflLDExEREREShfvnyxbw/38eNHlC1bFosXL4avr6/Y4bBSZvjw4UhNTcWaNWvEDiWLJk2awNnZucBmSmOMsbz4Uo6R13yNmyWwUiUkJAT3799H3bp1ERcXhxkzZgBAiZoZihUf1atX/+KIGowxxvKPk1tW6ixatAhhYWHQ0NBA7dq1cf78eZiamoodFiuFfvrpJ7FDYIyxEoeTWxHsWbYRBx5HYdu88XkexooVDBcXFwQHB4sdBmNK7+zZs2KHwBhjX4WT2yJ2/t4DdHkzHDBKRtuAaujZoZvYITHGGGOMlRg8Q1kRa+hYCVb3GgIqafgxeDAiYyPFDokxxhhjrMQQNbm1s7ODRCLJ8hgyZAgA+biQQ4cOhbW1NbS1teHo6Ii1a9cqnCMpKQnDhg2DqakpdHV10aFDBzx79kyM28kTiUSCRecsgRe18VnlHbx2dsKnFJ5ekjHGGGOsIIia3AYFBSE6Olp4nDx5EgDQpUsXAMDIkSNx7NgxbNu2DaGhoRg5ciSGDRuGv//+WzjHiBEjsH//fuzcuRMXLlxAQkIC2rVrV2SzC32NLjoXYLZzHfDRDDdf3cCAQwOynQKWMcYYY4zlj6jJrZmZGSwtLYXH4cOHUaFCBWHqz0uXLsHb2xtNmjSBnZ0dfvrpJzg5OeHatWsAgLi4OGzatAmLFy+Gp6cnXFxcsG3bNty+fTvbGX+Uhbq2Gn6KPwb8tRsSmRp23N6BpZeXih0WY4wxxlixpzRtbpOTk7Ft2zb0799fmAq1YcOGOHjwIJ4/fw4iwpkzZ/DgwQO0atUKABAcHIyUlBS0bNlSOE+ZMmVQvXp1BAYG5nitpKQkxMfHKzyKlKYmBmADJFGNQceWAADGnByDU49PFW0cjDHGGGMljNIktwcOHEBsbCx8fHyEdStWrEDVqlVhbW0NDQ0NtG7dGmvWrEHDhg0BAC9fvoSGhgaMjIwUzmVhYSHMXZ6duXPnQiqVCg8bG5tCuaccaWrCFlFoXes1cHUoqqV4Q0YydNvTjTuYlTDTpk2Ds7Oz8NzHxwdeXl6ixZOZssVTmp09exYSiQSxsbGFep3NmzfD0NCwUK/xLTJ/Zr5GZGQkJBIJbty4USAxFYTMn7UmTZpgxIgRosXDWEmmNMntpk2b0KZNG5QpU0ZYt2LFCly+fBkHDx5EcHAwFi9ejMGDB+fa5ICIhNrf7EyYMAFxcXHC4+nTpwV2H3ny/+nkBno+BCDBy43rUNvSFW8/v4XXTi/uYFaCLV++HJs3by7QcxZEMlBcFFUCKAZ3d3dER0dDKpWKHQorAvv27cPMmTML9Jz8xypjckoxzu2TJ08QEBCAffv2Ces+f/6MX3/9Ffv378d3330HAKhZsyZu3LiBRYsWwdPTE5aWlkhOTsb79+8Vam9jYmLg7u6e4/U0NTWhqalZeDeUm/9fu221Jyhb1h3Pn2thus4+PNV1xc1XN+F70Bc7vt/xxQSdFZ3k5GRoaGgUyLk4cWE50dDQgKWlpdhhsC9ISUmBurp6gZzL2Ni4QM7DGMtKKWpu/f39YW5uLiSxgPxLJCUlBSoqiiGqqqpCJpMBAGrXrg11dXVhlAUAiI6Oxp07d76Y3Iru/zW3aimf8eOP8lW7N9lgd5fdUFNRw847O7H40mIRAyy5Pnz4gF69ekFXVxdWVlZYunRplp8H7ezsMGvWLPj4+EAqlWLAgAEAgHHjxsHBwQE6Ojqwt7fH5MmTkZKSonD+efPmwcLCAvr6+vD19UViYqLC9sw1K0SEBQsWwN7eHtra2nBycsKePXuE7ek1ladOnYKrqyt0dHTg7u6OsLAwAPKfmKdPn46bN28KQ+nlVDOclpaGUaNGwdDQECYmJhg7dmyWUTpyi+f9+/fo1asXzMzMoK2tjUqVKsHf31/Y/uzZM3Tv3h3GxsbQ1dWFq6srrly5Imw/dOgQateuDS0tLdjb22P69OlITU0VtkskEmzcuBGdOnWCjo4OKlWqhIMHDwKQ/9TctGlTAICRkREkEolCM6aM3r59ix49esDa2ho6OjqoUaMG/vzzT4V99uzZgxo1akBbWxsmJibw9PTEx48fhde9bt260NXVhaGhIRo0aIAnT55k+x4C8lFbmjRpIjxv0qQJhg0bhhEjRsDIyAgWFhZYv349Pn78iH79+kFfXx8VKlTA0aNHhWMy10qnNx84fvw4HB0doaenh9atWyM6Olo4JjU1FcOHDxfe03HjxsHb2ztPtXcHDhyAg4MDtLS00KJFiyy/YK1duxYVKlSAhoYGKleujK1btwrbsvvZPzY2FhKJRJjZLLeymy63zwwg/z/C0dERWlpaqFKlCtasWaOw/erVq3BxcYGWlhZcXV0REhKS6/1HR0fju+++g7a2NsqXL48dO3bAzs4Oy5YtE/aRSCRYt24dOnbsCF1dXcyaNQtpaWnw9fVF+fLloa2tjcqVK2P58uUK587LZy3z905ycjLGjh2LsmXLQldXF/Xq1VOYJS638jBt2jT88ccf+Pvvv4XvgrNnzyI5ORlDhw6FlZUVtLS0YGdnh7lz5+b6+jBWrJHI0tLSqFy5cjRu3Lgs2zw8PKhatWp05swZevz4Mfn7+5OWlhatWbNG2GfgwIFkbW1NAQEBdP36dWrWrBk5OTlRampqnmOIi4sjABQXF1cg95SrTp2IAKI1a+jpUyIVFfnT0FCiVVdWEaaBVKar0ImHJ4omnnz6/Pkz3bt3jz5//iysk8mIEhLEechkeY/9xx9/JFtbWwoICKDbt29Tp06dSF9fn/z8/IR9bG1tycDAgBYuXEjh4eEUHh5OREQzZ86kixcvUkREBB08eJAsLCxo/vz5wnG7du0iDQ0N2rBhA92/f58mTpxI+vr65OTkJOzj7e1NHTt2FJ7/+uuvVKVKFTp27Bg9evSI/P39SVNTk86ePUtERGfOnCEAVK9ePTp79izdvXuXGjVqRO7u7kRE9OnTJxo9ejRVq1aNoqOjKTo6mj59+pTtvc+fP5+kUint2bOH7t27R76+vqSvr5+veIYMGULOzs4UFBREERERdPLkSTp48CAREX348IHs7e2pUaNGdP78eQoPD6ddu3ZRYGAgEREdO3aMDAwMaPPmzfTo0SM6ceIE2dnZ0bRp04TrAyBra2vasWMHhYeH0/Dhw0lPT4/evn1LqamptHfvXgJAYWFhFB0dTbGxsdne67Nnz2jhwoUUEhJCjx49ohUrVpCqqipdvnyZiIhevHhBampqtGTJEoqIiKBbt27R6tWr6cOHD5SSkkJSqZR++eUXevjwId27d482b95MT548yfY9JCLy8/MjDw8P4bmHhwfp6+vTzJkz6cGDBzRz5kxSUVGhNm3a0Pr16+nBgwc0aNAgMjExoY8fPyq81+/fvyciIn9/f1JXVydPT08KCgqi4OBgcnR0pJ49ewrXmTVrFhkbG9O+ffsoNDSUBg4cSAYGBlniyyj9vK6urhQYGEjXrl2junXrCmWKiGjfvn2krq5Oq1evprCwMFq8eDGpqqrS6dOniYgoIiKCAFBISIhwzPv37wkAnTlzRuF+ciq7RHn7zKxfv56srKxo79699PjxY9q7dy8ZGxvT5s2biYgoISGBzMzMqFu3bnTnzh06dOgQ2dvbZ4kvM09PT3J2dqbLly9TcHAweXh4kLa2Ni1dulTYBwCZm5vTpk2b6NGjRxQZGUnJyck0ZcoUunr1Kj1+/Ji2bdtGOjo6tGvXLuG4vHzWPDw8FL53evbsSe7u7vTvv//Sw4cPaeHChaSpqUkPHjxQeN9yKg8fPnygrl27UuvWrYXvgqSkJFq4cCHZ2NjQv//+S5GRkXT+/HnasWNHjq8LY2LLLsdIl9d8TfTk9vjx48J/VplFR0eTj48PlSlThrS0tKhy5cq0ePFikmXIZj5//kxDhw4lY2Nj0tbWpnbt2lFUVFS+Yijy5LZ7d3k2+/8v0Q4d5E9HjiSSyWTU70A/wjSQ8XxjevzucdHElA/ZFbyEBPk9iPFISMhb3PHx8aSurk67d+8W1sXGxpKOjk6W5NbLyyvX8y1YsIBq164tPHdzc6OBAwcq7FOvXr0ck9uEhATS0tISkr90vr6+1KNHDyL6L0EICAgQth85coQACK//1KlTFa6REysrK5o3b57wPCUlhaytrfMVT/v27alfv37Znv+3334jfX19evv2bbbbGzVqRHPmzFFYt3XrVrKyshKeA6BJkyYJzxMSEkgikdDRo0eJKGsCmB9t27al0aNHExFRcHAwAaDIyMgs+719+5YACAl9ZnlNbhs2bCg8T01NJV1dXerTp4+wLjo6mgDQpUuXsr03f39/AkAPHz4Ujlm9ejVZWFgIzy0sLGjhwoUK1ylXrlyuyS0AIdEnIgoNDSUAdOXKFSIicnd3pwEDBigc16VLF2rbti0R5S+5/VLZzctnxsbGJksyNnPmTHJzcyMiebkzNjYW/kggIlq7du0Xk9v0+w0KChLWhYeHE4Asye2IESOyPUdGgwcPps6dOwvPc/usESkmtw8fPiSJRELPnz9XOG/z5s1pwoQJRJS38pBd2Rw2bBg1a9ZM4f9NxpRZQSS3ore5bdmyZY4TGFhaWir85JkdLS0trFy5EitXriyM8ArH/5sl4P8/v/38M3DwILB5MzB7tgRrvluDu6/v4urzq/Da5YXA/oHQ1dAVL94S4vHjx0hJSUHdunWFdVKpFJUrV86yr6ura5Z1e/bswbJly/Dw4UMkJCQgNTUVBgYGwvbQ0FAMHDhQ4Rg3NzecOXMm23ju3buHxMREtGjRQmF9cnIyXFxcFNbVrFlTWLaysgIgb1terly5nG5XQVxcHKKjo+Hm5iasU1NTg6urq/D5y0s8gwYNQufOnXH9+nW0bNkSXl5eQhOgGzduwMXFJce2hMHBwQgKCsLs2bOFdWlpaUhMTMSnT5+go6OT5V51dXWhr6+PmJiYPN1nxvPOmzcPu3btwvPnz5GUlISkpCTo6so/R05OTmjevDlq1KiBVq1aoWXLlvjhhx9gZGQEY2Nj+Pj4oFWrVmjRogU8PT3RtWtX4XXPq4z3oaqqChMTE9SoUUNYZ2FhAQBfvDcdHR1UqFBBeG5lZSXsHxcXh1evXimUZ1VVVdSuXVtoupWT9Pc+XZUqVWBoaIjQ0FDUrVsXoaGh+OmnnxSOadCgQZaf3/PiS2U3t8/M69ev8fTpU/j6+grNgwB5c4z09uuhoaFwcnISyk/6Ob4kLCwMampqqFWrlrCuYsWKWUbeAbL/Lli3bh02btyIJ0+e4PPnz0hOThY6debls5bZ9evXQURwcHBQWJ+UlAQTExPh+ZfKQ058fHzQokULVK5cGa1bt0a7du0Uhs9krCQSPbktldI7syUlAQBatQLKlQOiooA9e4A+fbSwt+te1F5fG7de3YLvQV/82flPpe5gpqMDJCSId+28SP+PJfPrmN1/OOlJULrLly+je/fumD59Olq1agWpVIqdO3di8eKvbxudnoAcOXIEZcuWVdiWucNjxk4s6fHnlsAURjxt2rTBkydPcOTIEQQEBKB58+YYMmQIFi1aBG1t7VzPP336dHz//fdZtmml/8EHZOmwI5FI8n2vixcvxtKlS7Fs2TLUqFEDurq6GDFiBJKTkwHIk8CTJ08iMDAQJ06cwMqVKzFx4kRcuXIF5cuXh7+/P4YPH45jx45h165dmDRpEk6ePIn69etDRUUlS5nJ3PY6p/vI7/uY3TkyXzsv5Tk72X2fZFyX3XnT16X3hch4rexeA+Dbym76fhs2bEC9evUUtqmqqmaJIa9yOiYv3wV//fUXRo4cicWLF8PNzQ36+vpYuHChQtvy/JLJZFBVVUVwcLBwX+n09PSE5byUh8xq1aqFiIgIHD16FAEBAejatSs8PT0V2tIzVtIoRYeyUidTza2qKpBeSfLbb/J/rQ2ssafLHqipqGHX3V2Yf3G+CIHmnUQC6OqK88hrzl+hQgWoq6vj6tWrwrr4+HiEh4fneuzFixdha2uLiRMnwtXVFZUqVRI6GKVzdHTE5cuXFdZlfp5R1apVoampiaioKFSsWFHhkZ+xlzU0NHKdbloqlcLKykohntTUVAQHB+c7HjMzM/j4+GDbtm1YtmwZ1q9fD+C/0UzevXuXbQy1atVCWFhYlnNXrFgxS8fRL90rgFzv9/z58+jYsSN69+4NJycn2NvbZ3mfJRIJGjRogOnTpyMkJAQaGhrYv3+/sN3FxQUTJkxAYGAgqlevjh07dgj3n7FTFwBRxlOVSqWwsLBQKM9paWl56kyVmpoqzPQIyGsyY2NjUaVKFQDysnzhwgWFYwIDA+Ho6AhA/hoAUHgdvuY1yO0zY2FhgbJly+Lx48dZykz58uUByMvtzZs38fnz52zPkZ0qVaogNTVV4bV6+PBhnoaYO3/+PNzd3TF48GC4uLigYsWKePTokbA9L5+1zFxcXJCWloaYmJgs95mfETRy+i4wMDBAt27dsGHDBuzatQt79+7N8XPKWEnANbdiyFRzCwD9+wPTpgEXLwJ37gDVqwONbBthZZuVGHRkEH499SuqmlVFh8odxIm5BNDX14e3tzfGjBkDY2NjmJubY+rUqVBRUcm1VrxixYqIiorCzp07UadOHRw5ckQhEQIAPz8/eHt7w9XVFQ0bNsT27dtx9+5d2Nvb5xjPL7/8gpEjR0Imk6Fhw4aIj49HYGAg9PT04O3tnaf7srOzQ0REBG7cuAFra2vo6+tnO9Sdn58f5s2bh0qVKsHR0RFLlixR+M88L/FMmTIFtWvXRrVq1ZCUlITDhw8LCU+PHj0wZ84ceHl5Ye7cubCyskJISAjKlCkDNzc3TJkyBe3atYONjQ26dOkCFRUV3Lp1C7dv38asWbPydK+2traQSCQ4fPgw2rZtC21tbYWarXQVK1bE3r17ERgYCCMjIyxZsgQvX74UYr1y5QpOnTqFli1bwtzcHFeuXMHr16/h6OiIiIgIrF+/Hh06dECZMmUQFhaGBw8eoG/fvgCAZs2aYeHChdiyZQvc3Nywbds23LlzJ0tTkqIwbNgwzJ07FxUrVkSVKlWwcuVKvH//PtfyrK6ujmHDhmHFihVQV1fH0KFDUb9+faGJw5gxY9C1a1fUqlULzZs3x6FDh7Bv3z5hjHFtbW3Ur18f8+bNg52dHd68eYNJkyblO/68fGamTZuG4cOHw8DAAG3atEFSUhKuXbuG9+/fY9SoUejZsycmTpwIX19fTJo0CZGRkVi0aNEXr1ulShV4enrip59+wtq1a6Guro7Ro0dDW1s7T98FW7ZswfHjx1G+fHls3boVQUFBQrKdfl9f+qxl5uDggF69eqFv375YvHgxXFxc8ObNG5w+fRo1atRA27Zt8/R62tnZ4fjx4wgLC4OJiQmkUilWrVoFKysrODs7Q0VFBbt374alpaVST+TB2DcrsBbAxViRdyibPFneE2rwYIXV338vXz10qOLugw8PJkwD6c3Ro1svbxVNjF/wpcbeyi4+Pp569uxJOjo6ZGlpSUuWLKG6devS+PHjhX1sbW0VOpWkGzNmDJmYmJCenh5169aNli5dSlKpVGGf2bNnk6mpKenp6ZG3tzeNHTv2i6MlyGQyWr58OVWuXJnU1dXJzMyMWrVqRefOnSOi7DtQhYSEEACKiIggIqLExETq3LkzGRoaEgDy9/fP9t5TUlLIz8+PDAwMyNDQkEaNGkV9+/bNVzwzZ84kR0dH0tbWJmNjY+rYsSM9fvxfp8fIyEjq3LkzGRgYkI6ODrm6ugqdlIjkIya4u7uTtrY2GRgYUN26dWn9+vXCdgC0f/9+hbilUqnCPc2YMYMsLS1JIpGQt7d3tvf69u1b6tixI+np6ZG5uTlNmjRJ4V7v3btHrVq1IjMzM9LU1CQHBwdauXIlERG9fPmSvLy8yMrKijQ0NMjW1pamTJlCaWlpwvmnTJlCFhYWJJVKaeTIkTR06NAsHcoydlIkyr5cZbzf7DqUZS5f+/fvp4xf2ykpKTR06FAyMDAgIyMjGjduHHXp0oW6d++e7euS8bx79+4le3t70tDQoGbNmmXpXLdmzRqyt7cndXV1cnBwoC1btihsv3fvHtWvX5+0tbXJ2dmZTpw4kW2Hsi+VXaLcPzNERNu3bydnZ2fS0NAgIyMjaty4Me3bt0/YfunSJXJyciINDQ1ydnYWRtX40mgJL168oDZt2pCmpibZ2trSjh07yNzcnNatWyfsk115TExMJB8fH5JKpWRoaEiDBg2i8ePHK8Scl89a5jKSPgqDnZ0dqaurk6WlJXXq1Ilu3ZJ/5+elPMTExFCLFi1IT09PeC/Wr19Pzs7OpKurSwYGBtS8eXO6fv16jq8LY2IriA5lEqKvaLBUwsTHx0MqlSIuLk6hg1ChmTMHmDhRXl27aZOw+sQJeftbqRR48eK/tqQpaSlovb01Tkechp2hHa7+eBVmumaFH2cOEhMTERERgfLlyyu0lSyOPn78iLJly2Lx4sXw9fUVOxzGvolMJoOjoyO6du1a4LNflXTPnj2DjY2N0JacMSaOL+UYec3XuM2tGLJplgAAnp6AvT0QFwfs2vXfenVVdezushsVjCogMjYSnf/qjOS05CIMuOQICQnBn3/+iUePHuH69evo1asXAKBjx44iR8ZY/j158gQbNmzAgwcPcPv2bQwaNAgRERHo2bOn2KEpvdOnT+PgwYOIiIhAYGAgunfvDjs7OzRu3Fjs0Bhj34iTWzFk6lCWTkXlv45l69YpHmKsbYxDPQ7BQNMA56POY/CRwV/VS5gBixYtgpOTkzAj1fnz52Fqaip2WIzlm4qKCjZv3ow6deqgQYMGuH37NgICAoS2xSxnKSkp+PXXX1GtWjV06tQJZmZmOHv2bIFNr8sYEw83S4AIzRI2bgQGDADatQMOHVLYFBMDWFsDKSlASAjw/6ETBUfDj6Ldn+0gIxmWtVoGv/p+hR9vJiWpWQJjjDHGlAc3SyiucmiWAADm5kD6MKDpw4Jl1KZSGyxqIe8JPOrEKBx7eKywomSMMcYYK3Y4uRVDDs0S0v38s/zfbduADx+ybh9RfwT6O/eHjGTotqcb7r+5X0iBMsYYY4wVL5zciuELNbcA0KQJ4OAgn/Hrzz+zbpdI5FP0NizXEPFJ8Wj/Z3u8+8wDcjPGGGOMcXIrhlxqbiUSxY5l2bWK1lTTxN6ue2ErtcXDdw/RdXdXpKRlP/0lY4wxxlhpwcmtGHKpuQUAb2/5biEhQIZZMhWY65rjYI+D0FXXxamIUxh5fGQhBMsYY4wxVnxwciuGPCS3pqbADz/Il7PrWJaupkVNbP9+OySQYHXQaqwNWluAgTLGGGOMFS+c3Iohl2YJ6dI7lv35p3xih5x0rNIRs5vNBgAMOzoMpyNOF0SUrABMmzYNzhnGc/Px8YGXl5do8WSmbPGUZmfPnoVEIkFsbGyhXmfz5s0wNDQs1Gt8i8yfma8RGRkJiUSCGzduFEhMBSHzZ61JkyYYMWKEaPEUhLyWWTs7OyxbtqxIYirucvtOVvbPr7Lg5FYMeai5BYCGDQFHR+DTJ2Dr1i+fcnzD8ehZoyfSKA2d/+rMIygoqeXLl2Pz5s0Fes6CSAaKi6JKAMXg7u6O6OhoSKVSsUNhRWDfvn0FPkVyUf+xmrnMcuJV+Lp164YHDx4Iz4v6+18Z/3DMDie3Yshjza1EAgweLF9etQqQyb60rwSbOmyCm7UbYhNj8d2O7/D64+sCCrh0S04uuKmOpVIpf/mzbGloaMDS0hISiUTsUFgOUlIKrtOusbEx9PX1C+x8YihpZTYtLQ2yL/1HqwS0tbVhbm5e4OctyLKtDDi5FUMea24BeccyfX0gLAw4efLL+2qpaeFA9wMob1gej98/htcuLySmfjmBLm0+fPiAXr16QVdXF1ZWVli6dGmWnwft7Owwa9Ys+Pj4QCqVYsCAAQCAcePGwcHBATo6OrC3t8fkyZOzfCHMmzcPFhYW0NfXh6+vLxIz/QGTuWaFiLBgwQLY29tDW1sbTk5O2LNnj7A9vaby1KlTcHV1hY6ODtzd3REWFgZAXlMyffp03Lx5ExKJBBKJJMea4bS0NIwaNQqGhoYwMTHB2LFjs0zhnFs879+/R69evWBmZgZtbW1UqlQJ/v7+wvZnz56he/fuMDY2hq6uLlxdXXHlyhVh+6FDh1C7dm1oaWnB3t4e06dPR2pqqrBdIpFg48aN6NSpE3R0dFCpUiUcPHgQgLzGoGnTpgAAIyMjSCQS+Pj4ZHuvb9++RY8ePWBtbQ0dHR3UqFEDf2YaV2/Pnj2oUaMGtLW1YWJiIkzHnP66161bF7q6ujA0NESDBg3w5MmTbN9DABgxYgSaNGkiPG/SpAmGDRuGESNGwMjICBYWFli/fj0+fvyIfv36QV9fHxUqVMDRo0eFYzLXSqfXgh0/fhyOjo7Q09ND69atER0dLRyTmpqK4cOHC+/puHHj4O3tnafauwMHDsDBwQFaWlpo0aIFnj59qrB97dq1qFChAjQ0NFC5cmVszfDzUXa1N7GxsZBIJDh79qzC/eRUdtPl9pkBAH9/fzg6OkJLSwtVqlTBmjVrFLZfvXoVLi4u0NLSgqurK0JCQnK9/+joaHz33XfQ1tZG+fLlsWPHjiw/n0skEqxbtw4dO3aErq4uZs2ahbS0NPj6+qJ8+fLQ1tZG5cqVsXz5coVz5+Wzlvl7Jzk5GWPHjkXZsmWhq6uLevXqCa8lkHt5mDZtGv744w/8/fffwnfB2bNnkZycjKFDh8LKygpaWlqws7PD3Llzs31Nbt++DRUVFbx58waA/POuoqKCLl26CPvMnTsXbm5uABTL7NmzZ9GvXz/ExcUJ1582bZpw3KdPn9C/f3/o6+ujXLlyWL9+/Rffn2PHjqFhw4bCa9iuXTs8evRI2O7m5obx48crHPP69Wuoq6vjzJkz+XpNDx8+jKpVq0JTUxNPnjxBUFAQWrRoAVNTU0ilUnh4eOD69esK17p//z4aNmwILS0tVK1aFQEBAZBIJDhw4ICwz/Pnz9GtWzcYGRnBxMQEHTt2RGRkpLA9L+Uks4y141/6/o+Li8NPP/0Ec3NzGBgYoFmzZrh586ZwnvQa399//x329vbQ1NQEEeX6upcvXx4A4OLiAolEovC996XPaX7KYYEgRnFxcQSA4uLiiuaCb94QyUf4IkpJyXX34cPlu373Xd5Ofy/mHknnSgnTQD329CCZTPaNASv6/Pkz3bt3jz5//iysk8lklJCUIMojP/f3448/kq2tLQUEBNDt27epU6dOpK+vT35+fsI+tra2ZGBgQAsXLqTw8HAKDw8nIqKZM2fSxYsXKSIigg4ePEgWFhY0f/584bhdu3aRhoYGbdiwge7fv08TJ04kfX19cnJyEvbx9vamjh07Cs9//fVXqlKlCh07dowePXpE/v7+pKmpSWfPniUiojNnzhAAqlevHp09e5bu3r1LjRo1Ind3dyIi+vTpE40ePZqqVatG0dHRFB0dTZ8+fcr23ufPn09SqZT27NlD9+7dI19fX9LX189XPEOGDCFnZ2cKCgqiiIgIOnnyJB08eJCIiD58+ED29vbUqFEjOn/+PIWHh9OuXbsoMDCQiIiOHTtGBgYGtHnzZnr06BGdOHGC7OzsaNq0acL1AZC1tTXt2LGDwsPDafjw4aSnp0dv376l1NRU2rt3LwGgsLAwio6OptjY2Gzv9dmzZ7Rw4UIKCQmhR48e0YoVK0hVVZUuX75MREQvXrwgNTU1WrJkCUVERNCtW7do9erV9OHDB0pJSSGpVEq//PILPXz4kO7du0ebN2+mJ0+eZPseEhH5+fmRh4eH8NzDw4P09fVp5syZ9ODBA5o5cyapqKhQmzZtaP369fTgwQMaNGgQmZiY0MePHxXe6/fv3xMRkb+/P6mrq5OnpycFBQVRcHAwOTo6Us+ePYXrzJo1i4yNjWnfvn0UGhpKAwcOJAMDgyzxZZR+XldXVwoMDKRr165R3bp1hTJFRLRv3z5SV1en1atXU1hYGC1evJhUVVXp9OnTREQUERFBACgkJEQ45v379wSAzpw5o3A/OZVdorx9ZtavX09WVla0d+9eevz4Me3du5eMjY1p8+bNRESUkJBAZmZm1K1bN7pz5w4dOnSI7O3ts8SXmaenJzk7O9Ply5cpODiYPDw8SFtbm5YuXSrsA4DMzc1p06ZN9OjRI4qMjKTk5GSaMmUKXb16lR4/fkzbtm0jHR0d2rVrl3BcXj5rHh4eCt87PXv2JHd3d/r333/p4cOHtHDhQtLU1KQHDx4ovG85lYcPHz5Q165dqXXr1sJ3QVJSEi1cuJBsbGzo33//pcjISDp//jzt2LEj29dEJpORqakp7dmzh4iIDhw4QKampmRubi7s07JlSxo3bpzCe/z+/XtKSkqiZcuWkYGBgXD9Dx8+EJH8O9XY2JhWr15N4eHhNHfuXFJRUaHQ0NAc3589e/bQ3r176cGDBxQSEkLt27enGjVqUFpaGhERrVy5ksqVK6fw/b9y5UoqW7assE9eX1N3d3e6ePEi3b9/nxISEujUqVO0detWunfvnvD+WVhYUHx8PBERpaWlUeXKlalFixZ048YNOn/+PNWtW5cA0P79+4mI6OPHj1SpUiXq378/3bp1i+7du0c9e/akypUrU1JSUp7LSWb+/v4klUqJKOfvf5lMRg0aNKD27dtTUFAQPXjwgEaPHk0mJib09u1bIiKaOnUq6erqUqtWrej69et08+ZNkslkub7uV69eJQAUEBBA0dHRwvly+5zmpxxml2Oky2u+xsktiZDcJiT8l9z+/8P/JQ8eyHeVSIj+n2fl6tTjU6Q2Q40wDTT59ORvDFhRdgUvISmBMA2iPBKSEvIUd3x8PKmrq9Pu3buFdbGxsaSjo5MlufXy8sr1fAsWLKDatWsLz93c3GjgwIEK+9SrVy/H5DYhIYG0tLSE5C+dr68v9ejRg4j++88jICBA2H7kyBECILz+U6dOVbhGTqysrGjevHnC85SUFLK2ts5XPO3bt6d+/fple/7ffvuN9PX1hS+7zBo1akRz5sxRWLd161aysrISngOgSZMmCc8TEhJIIpHQ0aNHiShrApgfbdu2pdGjRxMRUXBwMAGgyMjILPu9ffuWAAgJfWZ5TW4bNmwoPE9NTSVdXV3q06ePsC46OpoA0KVLl7K9N39/fwJADx8+FI5ZvXo1WVhYCM8tLCxo4cKFCtcpV65crv85AhASfSKi0NBQAkBXrlwhIiJ3d3caMGCAwnFdunShtm3bElH+ktsvld28fGZsbGyy/Cc4c+ZMcnNzIyJ5uTM2Nhb+SCAiWrt27ReT2/T7DQoKEtaFh4cTgCzJ7YgRI7I9R0aDBw+mzp07C89z+6wRKSa3Dx8+JIlEQs+fP1c4b/PmzWnChAlElLfykF3ZHDZsGDVr1izPlQDff/89DR06lIiIRowYQaNHjyZTU1O6e/cupaSkkJ6eXo6fx4yJV0a2trbUu3dv4blMJiNzc3Nau3ZtnmIiIoqJiSEAdPv2beG5mpoa/fvvv8I+bm5uNGbMGCLK32t648aNL147NTWV9PX16dChQ0REdPToUVJTU6Po6Ghhn5MnTyokt5s2baLKlSsrvO5JSUmkra1Nx48fJ6K8lZPMMr/G2X3/nzp1igwMDCgxMVFhfYUKFei3334TjlNXV6eYmJgv3nvm1z27zz5R7p/T/JTDgkhuuVmCGNKbJQB5appQqRLQpo08G169Om+XaFa+GX5rJx9DbOa/M7Hl5pavibREefz4MVJSUlC3bl1hnVQqReXKlbPs6+rqmmXdnj170LBhQ1haWkJPTw+TJ09GVFSUsD00NFT4uS5d5ucZ3bt3D4mJiWjRogX09PSEx5YtWxR+BgKAmjVrCstWVlYAgJiYmFzu+D9xcXGIjo5WiEdNTU3hPvMSz6BBg7Bz5044Oztj7NixCAwMFI6/ceMGXFxcYGxsnG0MwcHBmDFjhsK5BwwYgOjoaHz69Cnbe9XV1YW+vn6+7hWQ/9w3e/Zs1KxZEyYmJtDT08OJEyeE98vJyQnNmzdHjRo10KVLF2zYsAHv378HIG8L6ePjg1atWqF9+/ZYvny5QlOAvMp4H6qqqjAxMUGNGjWEdRYWFgC+/D7q6OigQoUKwnMrKyth/7i4OLx69UqhPKuqqqJ27dq5xpb5va9SpQoMDQ0RGhoKQF6WGzRooHBMgwYNhO358aWym9tn5vXr13j69Cl8fX0Vys2sWbOEMhkaGgonJyfo6Ohke47shIWFQU1NDbVq1RLWVaxYEUZGRln2ze67YN26dXB1dYWZmRn09PSwYcMGoWzl5bOW2fXr10FEcHBwULjPc+fOKXwXfKk85MTHxwc3btxA5cqVMXz4cJw4ceKL+zdp0kT46f7cuXNo2rQpGjdujHPnziEoKAifP3/OUjbyImM5kEgksLS0/GLsjx49Qs+ePWFvbw8DAwPh5/D019nMzAwtWrTA9u3bAQARERG4dOkSevXqBSDvr6mGhoZCbIC8fA4cOBAODg6QSqWQSqVISEgQrh0WFgYbGxtYWloKx2T8HALy77uHDx9CX19fuLaxsTESExPx6NGjryoneRUcHIyEhAThuy/9ERERoXDvtra2MDMzUzg2t9c9O3n5nOa3HH4rtUI9O8uemhqgqgqkpeXaqSzdsGHA0aPA778DM2cCenq5H9PfpT/C34Zj3sV5+PHgj7CV2sLDzuMbg8+ejroOEiYkFMq583LtvKD/t2XK3PkhfX1Gurq6Cs8vX76M7t27Y/r06WjVqhWkUil27tyJxYsXf2XUEDouHDlyBGXLllXYppnxDyAA6urqwnJ6/AXd8SEv8bRp0wZPnjzBkSNHEBAQgObNm2PIkCFYtGgRtLW1cz3/9OnT8f3332fZppXeyRKK9wrI7ze/97p48WIsXboUy5YtQ40aNaCrq4sRI0YInQNVVVVx8uRJBAYG4sSJE1i5ciUmTpyIK1euoHz58vD398fw4cNx7Ngx7Nq1C5MmTcLJkydRv359qKioZCkz2XXGyO4+8vs+ZneOzNfOS3nOTnadgDKuy+686etUVFSyXCunDinfUnbT99uwYQPq1aunsE1VVTVLDHmV0zF5+S7466+/MHLkSCxevBhubm7Q19fHwoULFdqW55dMJoOqqiqCg4OF+0qnl+HLPi/lIbNatWohIiICR48eRUBAALp27QpPT0+FtvQZNWnSBH5+fnj48CHu3LmDRo0a4dGjRzh37hxiY2NRu3btr+oIl9/Pdfv27WFjY4MNGzagTJkykMlkqF69ukIH3169esHPzw8rV67Ejh07UK1aNTg5OQHI+2uqra2dpaz7+Pjg9evXWLZsGWxtbaGpqQk3Nzfh2hk/CzmRyWSoXbu2kHxnlDmhLGgymQxWVlYK7YvTZezQnLlsA3l73bO7HvDlz2l+y+G34ppbseSjUxkAtGolr8GNj899WLCMZjefjS5VuyBFloJOuzrhwdsHuR/0FSQSCXQ1dEV55LWnboUKFaCuro6rV68K6+Lj4xEeHp7rsRcvXoStrS0mTpwIV1dXVKpUSehglM7R0RGXL19WWJf5eUbpHRiioqJQsWJFhYeNjU2e7gmQ1zykpaV9cR+pVAorKyuFeFJTUxEcHJzveMzMzODj44Nt27Zh2bJlQseQmjVr4saNG3j37l22MdSqVQthYWFZzl2xYkUhWcrLvQLI9X7Pnz+Pjh07onfv3nBycoK9vX2W91kikaBBgwaYPn06QkJCoKGhgf379wvbXVxcMGHCBAQGBqJ69erYsWOHcP+Za3LFGBZHKpXCwsJCoTynpaXlqTNVamoqrmWY+jAsLAyxsbGoUqUKAHlZvnDhgsIxgYGBcHR0BPDff84ZX4eveQ1y+8xYWFigbNmyePz4cZYyk16jVLVqVdy8eROfP3/O9hzZqVKlClJTUxVeq4cPH+ZpiLnz58/D3d0dgwcPhouLCypWrKhQG5aXz1pmLi4uSEtLQ0xMTJb7zFg7mJucvgsMDAzQrVs3bNiwAbt27cLevXtz/JxWr14dJiYmmDVrFpycnGBgYAAPDw+cO3cOZ8+ehYdHzhUkefkuyou3b98iNDQUkyZNQvPmzeHo6Cj8spKRl5cXEhMTcezYMezYsQO9e/cWtn3La3r+/HkMHz4cbdu2RbVq1aCpqSl0sgPk5ScqKgqvXr0S1gUFBSmco1atWggPD4e5uXmW66fXBue3nGQnu9e8Vq1aePnyJdTU1LJc29TUNMdz5eV1z+47OC+fUyB/5fBbcc2tWDQ15QPY5jG5VVEBhg4F/PyAlSuBgQPlQ4XlepxEBX94/YGouChceX4F3+34Dpd8L8FUJ+cCXlLp6+vD29sbY8aMgbGxMczNzTF16lSoqKjkmiBXrFgRUVFR2LlzJ+rUqYMjR44oJEIA4OfnB29vb7i6uqJhw4bYvn077t69C3t7+xzj+eWXXzBy5EjIZDI0bNgQ8fHxCAwMhJ6eHry9vfN0X3Z2doiIiMCNGzdgbW0NfX39LDW/6fHNmzcPlSpVgqOjI5YsWaLwn3le4pkyZQpq166NatWqISkpCYcPHxYSnh49emDOnDnw8vLC3LlzYWVlhZCQEJQpUwZubm6YMmUK2rVrBxsbG3Tp0gUqKiq4desWbt++jVmzZuXpXm1tbSGRSHD48GG0bdsW2traCrUw6SpWrIi9e/ciMDAQRkZGWLJkCV6+fCnEeuXKFZw6dQotW7aEubk5rly5gtevX8PR0RERERFYv349OnTogDJlyiAsLAwPHjxA3759AQDNmjXDwoULsWXLFri5uWHbtm24c+cOXFxc8nQPBWnYsGGYO3cuKlasiCpVqmDlypV4//59ruVZXV0dw4YNw4oVK6Curo6hQ4eifv36wk+rY8aMQdeuXVGrVi00b94chw4dwr59+xAQEABAXttVv359zJs3D3Z2dnjz5g0mTZqU7/jz8pmZNm0ahg8fDgMDA7Rp0wZJSUm4du0a3r9/j1GjRqFnz56YOHEifH19MWnSJERGRmLRokVfvG6VKlXg6emJn376CWvXroW6ujpGjx6dbS1eZhUrVsSWLVtw/PhxlC9fHlu3bkVQUJDCf+K5fdYyc3BwQK9evdC3b18sXrwYLi4uePPmDU6fPo0aNWqgbdu2eXo97ezscPz4cYSFhcHExARSqRSrVq2ClZUVnJ2doaKigt27d8PS0jLHIQklEgkaN26Mbdu2YeRI+ZTuNWvWRHJyMk6dOgU/P78vXj8hIQGnTp0SmopkbC6SV+mjC6xfvx5WVlaIiorKMjICIK957NixIyZPnozQ0FD07NlT2PYtr2nFihWxdetWuLq6Ij4+HmPGjFH4ZapFixaoUKECvL29sWDBAnz48AETJ04UXj9AXqu8cOFCdOzYETNmzIC1tTWioqKwb98+jBkzBtbW1vkuJ9nJ7vvf09MTbm5u8PLywvz581G5cmW8ePEC//zzD7y8vHJs+pCX193c3Bza2to4duwYrK2toaWlBalUmuvndOnSpfkqh98s15a9pUCRdygjIrKykvcSu349z4fExRHp6ckPO3kyf5d7+eEl2S2zI0wDNfy9ISWmJOZ+UA6+1Nhb2cXHx1PPnj1JR0eHLC0tacmSJVS3bl0aP368sI+tra1Cp5J0Y8aMIRMTE9LT06Nu3brR0qVLs3SemD17NpmampKenh55e3vT2LFjvzhagkwmo+XLl1PlypVJXV2dzMzMqFWrVnTu3Dkiyr4DVUhICAGgiIgIIiJKTEykzp07k6GhIQEgf3//bO89JSWF/Pz8yMDAgAwNDWnUqFHUt2/ffMUzc+ZMcnR0JG1tbTI2NqaOHTvS48ePheMjIyOpc+fOZGBgQDo6OuTq6ip0UiKSj5jg7u5O2traZGBgQHXr1qX169cL25GhQ0Y6qVSqcE8zZswgS0tLkkgk5O3tne29vn37ljp27Eh6enpkbm5OkyZNUrjXe/fuUatWrcjMzIw0NTXJwcGBVq5cSUREL1++JC8vL7KysiINDQ2ytbWlKVOmCL2FiYimTJlCFhYWJJVKaeTIkTR06NAsHcoydlIkyr5cZbzfvHTO2b9/P2X82k5JSaGhQ4eSgYEBGRkZ0bhx46hLly7UvXv3bF+XjOfdu3cv2dvbk4aGBjVr1ixL57o1a9aQvb09qaurk4ODA23ZskVh+71796h+/fqkra1Nzs7OdOLEiWw7lH2p7BLl/pkhItq+fTs5OzuThoYGGRkZUePGjWnfvn3C9kuXLpGTkxNpaGiQs7OzMKrGl0ZLePHiBbVp04Y0NTXJ1taWduzYQebm5rRu3Tphn+zKY2JiIvn4+JBUKiVDQ0MaNGgQjR8/XiHmvHzWMpeR9FEY7OzsSF1dnSwtLalTp05069YtIspbeYiJiaEWLVqQnp6e8F6sX7+enJ2dSVdXlwwMDKh58+Z0PZf/d1auXEkA6PDhw8K6jh07kqqqqsL/k9m9xwMHDiQTExMCQFOnTiWi7Mu+k5OTsD07J0+eJEdHR9LU1KSaNWvS2bNns30/0jspNm7cOMs5vuY1JSK6fv06ubq6kqamJlWqVIl2796d5R5CQ0OpQYMGpKGhQVWqVKFDhw4RADp27JiwT3R0NPXt25dMTU1JU1OT7O3tacCAAcJrmJdyklnmmHP6/o+Pj6dhw4ZRmTJlSF1dnWxsbKhXr14UFRVFRDl3RM7L675hwwaysbEhFRUVhe+9L31O81MOC6JDmYToKxoslTDx8fGQSqWIi4uDgYFB0Vy0fHkgMhK4dAmoXz/Phw0bJp/QoUMH4O+/83fJe6/vwX2TO+KS4tC7Zm9s8dryVYNvJyYmIiIiAuXLl1doK1kcffz4EWXLlsXixYvh6+srdjiMfROZTAZHR0d07dq1wGe/KumePXsGGxsboS05Y/lx8eJFNGzYEA8fPlTo9Mfy70s5Rl7zNW6WIJY8zlKW2dCh8uT20CHg8WMgh1+8s1XVrCr2dN2DNtvbYNutbahoVBFTm0zN1/WLu5CQENy/fx9169ZFXFwcZsyYAQDo2LGjyJExln9PnjzBiRMn4OHhgaSkJKxatQoREREKP8+y7J0+fRoJCQmoUaMGoqOjMXbsWNjZ2aFx48Zih8aKgf3790NPTw+VKlXCw4cP4efnhwYNGnBiqyS4Q5lY8tmhLF3lykDLlvJhwTJN0pMnnvaeWPvdWgDAtHPTsO3WtvyfpJhbtGgRnJychBmpzp8//8VG9owpKxUVFWzevBl16tRBgwYNcPv2bQQEBAhti1nOUlJS8Ouvv6JatWro1KkTzMzMcPbs2Sy9+hnLzocPHzB48GBUqVIFPj4+qFOnDv7O78+prNBwswSI1CyhXj3g6lV524IOHfJ16JEjQLt2gKEh8OwZkM1oHrkad3IcFgQugLqKOo73Po6m5Zvm+diS1CyBMcYYY8qjIJolcM2tWL6yWQIgn9ChQgUgNhbY9pUVr3M95wpDhHnt8sLtV7e/7kSMMcYYY0qEk1uxfGWzBEA+LNiQIfLllSvlTRTyfQ6JCrZ02oJG5RohPikebXe0xbP4Z/k/EWOMMcaYEuHkVizfUHMLAP36yZsj3L0LZDMJSd5CUNPCge4H4GjqiGfxz9B2e1vEJcbl+Xhu0cIYY4yxglQQuQUnt2L5hppbQN7e9v9jymPFiq8Pw1jbGEd7HYWVnhVux9xGp12dkJyW8zR7wH/TKH769OnrL8wYY4wxlkl6bvEtnTt5KDCxfGNyC8iHBVu7Fjh4EHjyBLC1/brz2Bra4p9e/6CRfyOciTyDfn/3w9ZOW6Eiyf5vH1VVVRgaGiImJgYAoKOj81Xj5TLGGGOMAfIa20+fPiEmJgaGhoZQVVX96nNxciuWb2yWAABVqwKenkBAgHxYsPnzvz4cZ0tn7Ou6D213tMWO2ztgY2CDeZ7zctw/fW7u9ASXMcYYY+xbGRoaCjnG1+LkViwFUHMLyGcsCwgANmwApk4FvmIab0GLCi2wqcMmeB/wxvyL82FjYIMhdYdku69EIoGVlRXMzc2RkpLy9RdljDHGGIO8KcK31Nim4+RWLAVQcwsA330H2NnJZ/LdsQP48cdvC6uvU188jXuKSWcmYdjRYShrUBZeVbxy3F9VVbVACiJjjDHGWEHgDmViKaCaW1VVedtb4OuHBcvs10a/4ufaP4NA6LG3By49vfTtJ2WMMcYYKwKc3IqlgJJbAOjfX94c4dYt4N9/v/l0kEgkWNV2Fdo7tEdiaiLa/9keD94++PYTM8YYY4wVMk5uxVJAzRIAwMgI6NNHvrxy5TefDgCgpqKGPzv/ibpl6+Lt57dova01XiW8KpiTM8YYY4wVEk5uxVKANbfAf00TDhwAoqIK5JTQ1dDFoR6HUMGoAiJiI/Ddju+QkJxQMCdnjDHGGCsEnNyKpQBrbgGgenWgaVMgLU0+LFhBMdc1x7Hex2CqY4rg6GB8v+v7XCd5YIwxxhgTCye3YingmlsA8POT/7t+PZBQgBWsFY0r4p+e/0BXXRcnH59E3/19ISNZwV2AMcYYY6yAcHIrlkJIbtu1AypVAt6/B/z9C+y0AIA6Zetgf7f9UFdRx667u+B31K9A5n9mjDHGGCtInNyKpYCbJQDyYcFGjpQvL10KpKYW2KkByCd52NppKySQYFXQKsz6d1bBXoAxxhhj7BtxciuWQqi5BQBvb8DEBIiIAPbvL9BTAwC6Ve+GFW1WAACmnJ2CddfWFfxFGGOMMca+Eie3YimEmltAPt7tkP/PmLtoUcFM6pDZ0LpDMaXxFADA4CODsefenoK/CGOMMcbYV+DkViyFVHMLyJNbTU3g6lXg4sUCPz0AYFqTaRhYeyAIhF77euHU41OFcyHGGGOMsXzg5FYshZjcmpsDffvKlxctKvDTA/hvFrMfqv6A5LRkeO3yQvCL4MK5GGOMMcZYHnFyK5ZCapaQbtQo+b8HDwJhYYVyCaiqqGJbp21oVr4ZEpIT0GZ7G56mlzHGGGOi4uRWLIVYcwsAVaoA7dvL29wuXVoolwAAaKppYn+3/ahlVQuvP71Gy60t8eLDi8K7IGOMMcbYF3ByK5ZCrrkFgF9+kf/7xx/A69eFdhkYaBrgaK+jqGhcEU/inqDVtlZ4//l94V2QMcYYYywHnNyKJb3mNjm5cIY0ANCoEeDqKs+fC3JK3uyY65rjRO8TsNKzwp2YO2j/Z3t8SvlUuBdljDHGGMuEk1uxpCe3gDzBLQQSyX+1t6tWAZ8/F8plBOWNyuN47+Mw1DLExacX8cNf8s5mjDHGGGNFhZNbsaQ3SwAKtWlC586ArS3w5g2wZUuhXUZQw6IGDvU4BG01bRx9eBS99/VGmiyt8C/MGGOMMQZObsWjofHfciF1KgMANbX/puRdsgSQyQrtUoKG5Rpif7f9UFdRx+57uzHg0ADIqAguzBhjjLFSj5Nbsaio/JfgFmLNLQD07w9IpcCDB8Dhw4V6KUGriq3wZ+c/oSJRgf8Nf4w6PgpUSG2LGWOMMcbScXIrpkIeDiydvj4wcKB8ubAmdchO56qd8XuH3wEAy68sx7Sz04ru4owxxhgrlTi5FVMRJbcAMGwYoK4OnD8vn5a3qHg7e2Nlm5UAgBn/zsDiwMVFd3HGGGOMlTqc3IqpCMa6TVe2LNCzp3x5cRHnl0PrDsXsZrMBAL+c/AXrg9cXbQCMMcYYKzU4uRVTEdbcAv9NybtnDxARUSSXFExoOAHjGowDAAw8PBB/3v6zaANgjDHGWKnAya2YirDmFgBq1gRatpSPmLBsWZFcUiCRSDC3+VwMch0EAqHvgb44FHaoaINgjDHGWInHya2YirjmFvhvUodNm4D3RTxDrkQiwaq2q9C7Zm+kylLRZXcXnI44XbRBMMYYY6xE4+RWTCIkt56e8hrcjx+B334rsssKVCQq8O/oj46VOyIpLQkd/uyAy88uF30gjDHGGCuROLkVUxE3SwDkU/KOHi1fXrGiSPNqgZqKGnb+sBOe9p74mPIRbba3wc2XN4s+EMYYY4yVOJzcikmEmlsA6N4dKFMGiI4G/hSpX5eWmhYOdDsAN2s3xCbGosXWFrj3+p44wTDGGGOsxODkVkwi1NwC8onR/Pzky4sWFc2UvNnR1dDFP73+gYulC15/eo3mW5rjwdsH4gTDGGOMsRKBk1sxiVRzCwA//SSfuezu3aKbkjc7hlqGONnnJGqY18DLhJdo9kczPHr3SLyAGGOMMVascXIrJhGTW0NDYPBg+fLs2QBRkYcgMNExQUDfAFQ1q4rnH56j2ZZmeBL7RLyAGGOMMVZscXIrJpGaJaQbOVIewtWrwGmRR+Qy1zVHQJ8AOJg4ICouCs22NMOz+GfiBsUYY4yxYoeTWzGJWHMLABYWwI8/ypfnzBElBAVW+lY43fc07I3s8fj9YzT7oxmiP0SLHRZjjDHGihFObsUkcs0tAIwZA6ipyWtuLyvBcLNlDcridN/TsJXaIvxdOJpvaY6YjzFih8UYY4yxYoKTWzGJXHMLAOXKAX36yJeVofYWAGwNbXHa+zSsDawR+iYUnls88fbTW7HDYowxxlgxwMmtmJQguQWA8eMBFRXg0CHg1i1RQxHYG9njdN/TsNKzwu2Y22ixtQXefy7i+YIZY4wxVuxwcismJWiWAAAODkCXLvLluXNFDUVBJZNKONX3FMx1zRHyMgSttrVCXGKc2GExxhhjTIlxcismJam5BYAJE+T//vUXEB4ubiwZOZo5IqBPAEy0TRD0Ightd7TFh6QPYofFGGOMMSXFya2YlKTmFgCcnIB27eSzlc2fL3Y0impY1MDJPidhqGWIwKeBaPdnO3xM/ih2WIwxxhhTQpzcikmJam4B4Ndf5f9u2QI8fSpuLJm5WLngRO8TMNA0wL9P/kXbHW2RkJwgdliMMcYYUzKc3IpJyZJbNzegaVMgJQVYtEjsaLKqU7aOQoLbZnsbbqLAGGOMMQWc3IpJiZolpEuvvd2wAYhRwuFl61nXw8k+JyHVlOJC1AVOcBljjDGmgJNbMSlZzS0ANG8O1K0LfP4MLFsmdjTZq1u2rpDgXnx6Ea23t0Z8UrzYYTHGGGNMCXByKyYlrLmVSP6rvV29GoiNFTWcHNUpWwcBfQOETmatt3GCyxhjjDFObsWlhDW3ANC+PVC9OhAfL09wlZVrGVec6nsKRlpGuPTsEo+DyxhjjDFObkWlpMmtisp/494uXQp8VOJRt2pZ1UJA3wAYaRnh8rPLnOAyxhhjpRwnt2JSwmYJ6bp2BSpUAN6+lXcuU2a1rGrhVN9TMNY2xpXnV9ByW0vEJsaKHRZjjDHGRMDJrZiUtOYWANTUgHHj5MsLFypliApcrFyEBPfq86touZUTXMYYY6w04uRWTEpccwsAffsCZcsCL17IJ3ZQds6Wzjjd97QwVW+LrS3w/vN7scNijDHGWBHi5FZM6TW3aWnyh5LR1AR++UW+PG8ekJoqbjx54WTphNPep2GqY4prL66hxdYWePf5ndhhMcYYY6yIcHIrpvTkFlDa3/0HDABMTYHHj4G//hI7mrypaVETp/vKE9zg6GA0/aMpYj4q4YwUjDHGGCtwnNyKKb1ZAqC0TRN0dYERI+TLc+YAMpmo4eRZDYsaOOt9FpZ6lrj16haabG6CFx9eiB0WY4wxxgoZJ7diUlOTz5oAKG3NLQAMGQIYGAB37wL794sdTd5VM6+Gcz7nYG1gjdA3oWjs3xhPYp+IHRZjjDHGChEnt2KSSJS+UxkAGBoCfn7y5WnTik/tLQA4mDjgX59/Ud6wPB69f4TGmxvj0btHYofFGGOMsULCya3YlHg4sIxGjgSkUuDOHWDPHrGjyZ/yRuXxb79/4WDigKi4KDTyb4T7b+6LHRZjjDHGCgEnt2IrJsmtkZE8wQWA6dOVcnCHL7I2sMa/Pv+iunl1RCdEo7F/Y9x6dUvssBhjjDFWwDi5FVsxaJaQbsQIeROFe/eKz8gJGVnoWeCM9xnUsqqF159eo+kfTXHtxTWxw2KMMcZYAeLkVmzFpOYWkDdLSB/3tjjW3gKAqY4pTvU9hfrW9fHu8zs039IcgU8DxQ6LMcYYYwWEk1uxFaOaWwAYNgwwNgbCwoA//xQ7mq9jqGWIE71PwMPWA/FJ8Wi5tSXORJwROyzGGGOMFQBObsVWjGpuAfmQYGPGyJenTy8es5ZlR19TH//0+gctK7TEx5SPaLujLY49PCZ2WIwxxhj7Rpzciq2YJbcAMHSofNayhw+B7dvFjubr6ajr4GD3g+hQuQMSUxPR4c8O2B9ajAbyZYwxxlgWnNyKrZg1SwAAPT1g7Fj58owZQEqKuPF8C001TezpsgddqnZBiiwFP+z+AX/c+EPssBhjjDH2lTi5FVsxrLkFgMGDAXNz4PFjYMsWsaP5Nuqq6tjReQf6O/eHjGTw+dsHyy8vFzssxhhjjH0FTm7FVgxrbgFAVxcYN06+PGsWkJwsbjzfSk1FDRs7bMSo+qMAACOOj8C0s9NARCJHxhhjjLH84ORWbMW05hYABg4ELC2ByEhg82axo/l2EokEi1ouwqymswAA089Nh98xP8ioGM03zBhjjJVynNyKrRgntzo6wIQJ8uXZs4vlLWQhkUgwsfFErGqzCgCw8upK+BzwQaqsmA4LwRhjjJUynNyKrZg2S0j3009AmTJAVBTw++9iR1NwhtQdgm2dtkFVooqtt7ai81+dkZhaPN8jxhhjrDTh5FZsxbjmFpDn5r/+Kl+ePbvY5ujZ6lWzF/Z32w9NVU0cDDuIttvb4kPSB7HDYowxxtgXcHIrtmJecwsAP/4IWFsDz58DGzeKHU3Bal+5PY71PgZ9DX2ciTyD5lua4+2nt2KHxRhjjLEccHIrtmJecwvIb2HiRPnynDnA58/ixlPQmtg1wWnv0zDRNkHQiyA03twYz+Ofix0WY4wxxrLBya3YSkByCwD9+wPlygHR0cBvv4kdTcFzLeOK8/3Oo6x+Wdx7fQ8N/Rvi4buHYofFGGOMsUw4uRVbCWiWAAAaGsCkSfLlefOAT5/EjacwOJo54kL/C6hoXBGRsZFo8HsDXI++LnZYjDHGGMuAk1uxlZCaWwDw8QHKlwdevQLWrhU7msJhZ2iHC/0uwMnCCTEfY+Cx2QOnHp8SOyzGGGOM/R8nt2IrITW3AKCu/l/t7fz5wMeP4sZTWCz0LHDO5xya2DVBQnIC2mxvg113dokdFmOMMcbAya34SlDNLQD06QNUqAC8fg2sXCl2NIVHqiXFsV7H8EPVH5AiS0GPvT2w4soKscNijDHGSj1ObsVWwpJbdXVg2jT58rx5wLt3ooZTqDTVNLGz804MqTMEBILfMT9MCJgAIhI7NMYYY6zU4uRWbCWoWUK6Hj2AGjWAuDh5gluSqaqoYmWblZjVdBYAYN7FefA96MvT9TLGGGMi4eRWbCWs5hYAVFWBuXPlyytXAs+eiRtPYZNIJJjYeCI2tN8AFYkK/G/4o9OuTviUUgKHjGCMMcaUHCe3YiuBNbcA0LYt0KiR/LbSmymUdD/W+hH7u+2HlpoWDj84DM8tnjybGWOMMVbEOLkVWwmsuQUAiUQ+YgIA+PsDoaHixlNUOlTugIA+ATDSMsKlZ5fQ0L8houKixA6LMcYYKzU4uRVbCU1uAcDNDfDyAmQy4NdfxY6m6DQo1wDn+52HtYE17r+5D/dN7rgTc0fssBhjjLFSgZNbsZXQZgnp5swBVFSAAweAS5fEjqboVDOvhsD+gXA0dcTzD8/RyL8RzkWeEzssxhhjrMTj5FZsJbjmFgAcHeUzlwHA+PFAaRoly0Zqgwv9L8Ddxh2xibFoua0ldtzeIXZYjDHGWIkmanJrZ2cHiUSS5TFkyBBhn9DQUHTo0AFSqRT6+vqoX78+oqL+a8OYlJSEYcOGwdTUFLq6uujQoQOeFafu+Rlrbkto5jdtmjyH//df4OhRsaMpWsbaxgjoE4DvHb9Hcloyeu3rhXkX5vFYuIwxxlghETW5DQoKQnR0tPA4efIkAKBLly4AgEePHqFhw4aoUqUKzp49i5s3b2Ly5MnQSk8IAYwYMQL79+/Hzp07ceHCBSQkJKBdu3ZIS0sT5Z7yLb3mFgBSUsSLoxDZ2ADDhsmXJ0yQt8EtTbTVtfHXD39hZP2RAIAJpyZg8JHBPBYuY4wxVggkpERVSCNGjMDhw4cRHh4OiUSC7t27Q11dHVu3bs12/7i4OJiZmWHr1q3o1q0bAODFixewsbHBP//8g1atWuXpuvHx8ZBKpYiLi4OBgUGB3U+efPoE6OqmBwLo6xft9YvIu3eAvb18YoetW4HevcWOSBzLLy/HyOMjQSB8V+k77PxhJ/Q09MQOizHGGFN6ec3XlKbNbXJyMrZt24b+/ftDIpFAJpPhyJEjcHBwQKtWrWBubo569erhwIEDwjHBwcFISUlBy5YthXVlypRB9erVERgYmOO1kpKSEB8fr/AQTcaa2xLaqQwAjI3lbW4BYPLkEtvEOFd+9f2wp+seaKlp4Uj4ETTZ3AQvE16KHRZjjDFWYihNcnvgwAHExsbC5/+9j2JiYpCQkIB58+ahdevWOHHiBDp16oTvv/8e587Je52/fPkSGhoaMDIyUjiXhYUFXr7MOWGYO3cupFKp8LCxsSm0+8qVqiqgpiZfLuEZ3/DhQJkyQGQksG6d2NGI53vH73G672mY6pgiODoY9TfWR+jrUjIQMGOMMVbIlCa53bRpE9q0aYMyZcoAAGT/b5jZsWNHjBw5Es7Ozhg/fjzatWuHdblkRkQEiUSS4/YJEyYgLi5OeDx9+rTgbuRrlPDhwNLp6ABTp8qXZ82St8Iordxs3HDJ9xIqGlfEk7gnaPB7A/z75F+xw2KMMcaKPaVIbp88eYKAgAD8+OOPwjpTU1OoqamhatWqCvs6OjoKoyVYWloiOTkZ79+/V9gnJiYGFhYWOV5PU1MTBgYGCg9RlfDhwDLq3x9wcADevAEWLxY7GnFVNK6IwP6BqG9dH+8T36PF1hbYeWen2GExxhhjxZpSJLf+/v4wNzfHd999J6zT0NBAnTp1EBYWprDvgwcPYGtrCwCoXbs21NXVhVEWACA6Ohp37tyBu7t70QRfEEpRcqumBsyeLV9evBh49UrceMRmpmuG031Po1OVTkhOS0aPvT2w4OICHiqMMcYY+0qiJ7cymQz+/v7w9vaGWnrb0/8bM2YMdu3ahQ0bNuDhw4dYtWoVDh06hMGDBwMApFIpfH19MXr0aJw6dQohISHo3bs3atSoAU9PTzFu5+uUkmYJ6Tp3BurUAT5+lDdPKO201bWxu8tu+NXzAwCMCxiHgYcHIiWtZA4NxxhjjBUm0ZPbgIAAREVFoX///lm2derUCevWrcOCBQtQo0YNbNy4EXv37kXDhg2FfZYuXQovLy907doVDRo0gI6ODg4dOgRVVdWivI1vU4pqbgFAIgHmzZMv//Yb8OiRuPEoA1UVVSxrvQxLWy2FBBKsv74ebXe0RWxirNihMcYYY8WKUo1zKxZRx7kFgFq1gJAQ4J9/gDZtiv76ImndGjh+HOjRA9jBs9IKDoYdRM+9PfEx5SOqmFbBkZ5HYG9kL3ZYjDHGmKiK3Ti3pVopq7lNN3eu/N8//5Tn9kyuQ+UOuND/Asrql8X9N/dRb2M9XIy6KHZYjDHGWLHAya0yKKXJrYuLvNYWAMaNA/g3hP84Wzrj6oCrqG1VG28+vUGzLc2w/dZ2scNijDHGlB4nt8qglHUoy2jWLEBDAzh5Ejh6VOxolEsZ/TI453NOGEmh9/7emHpmKo+kwBhjjH0BJ7fKoJTW3AKAvb185jIAGD0aSOEBAhToauhiT9c9GOs+FgAw498Z6LmvJxJTS98fQowxxlhecHKrDNJrbkthcgsAkyYBpqbA/fvy0ROYIhWJCua3mI+N7TdCTUUNO+/sRLM/miHmY4zYoTHGGGNKh5NbZZBec1sKmyUAgFQKzJghX546Fcg04Rz7P99avjjR+wSMtIxw6dkl1NtYD3dj7oodFmOMMaZUOLlVBqW4WUK6AQOAatWAd+/+S3RZVk3LN8Ul30uoYFQBkbGRcP/dHccfHhc7LMYYY0xpcHKrDEpxh7J0amrAkiXy5VWrgAcPxI1HmVU2rYwrP15BY9vGiE+KR9sdbbH00lLuaMYYY4yBk1vlwDW3AICWLYG2bYHUVGDMGLGjUW4mOiY40fsE+jv3h4xkGHViFHwP+iIptXSXIcYYY4yTW2VQyjuUZbRoEaCqChw8CJw+LXY0yk1TTRMbO2zE0lZLoSJRgf8NfzTb0gyvEl6JHRpjjDEmGk5ulUEp71CWkaMjMGiQfHnkSCAtTdx4lJ1EIsGI+iPwT89/INWUIvBpIOpsqIOQaJ7yjTHGWOnEya0y4GYJCqZNAwwNgVu3AH9/saMpHlpVbIWrA67CwcQBT+OfoqF/Q+y5t0fssBhjjLEix8mtMuAOZQpMTIApU+TLkyYBHz6IG09x4WDigCs/XkGrCq3wKeUTuuzugmlnp0FGMrFDY4wxxooMJ7fKgGtusxgyBKhUCXj1Cpg7V+xoig9DLUMc7nkYo+qPAgBMPzcdXXd3xcfkjyJHxhhjjBUNTm6VAXcoy0JDA1i4UL68ZAkQGSlqOMWKmooaFrdajN87/A4NVQ3sDd2LBr83wJPYJ2KHxhhjjBU6Tm6VAXcoy1aHDkDTpvKcf/x4saMpfvq59MMZ7zMw1zXHzVc3UWdDHVyIuiB2WIwxxlih4uRWGXCzhGxJJPJaW4kE2LULCAwUO6Lix93GHUEDguBs6YzXn16j6R9NsTZoLU/4wBhjrMTi5FYZcIeyHDk7A/37y5dHjABk3Dcq38pJy+FCvwvoWq0rUmWpGPzPYPx48EckpnJ5Y4wxVvJwcqsMuOb2i2bNAvT0gKAgYMcOsaMpnnQ1dLGz804s8FwAFYkKfr/xOxr7N8az+Gdih8YYY4wVKE5ulQF3KPsiS0tgwgT58oQJwKdP4sZTXEkkEoxpMAbHeh2DkZYRgl4Eofb62jj/5LzYoTHGGGMFhpNbZcAdynI1ciRQrhzw7Jl8il729VpUaIFrP11DTYuaiPkYg2ZbmmH11dXcDpcxxliJwMmtMuBmCbnS1gYWLJAvz58PPH0qbjzFnb2RPQL7B6JH9R5IlaVi6NGh6H+wP7fDZYwxVuxxcqsMuENZnnTtCjRsKG+WMGqU2NEUf7oautj+/XYsbrkYKhIVbL6xGY38G+FpHP/lwBhjrPji5FYZcM1tnkgkwKpVgIoKsGcPEBAgdkTFn0QiwSi3UTjR+wRMtE1w7cU11F5fG2cjz4odGmOMMfZVOLlVBuk1tykpPNZVLpycgKFD5ctDhwLJyeLGU1I0t2+Oaz9dE8bD9dziieWXl3M7XMYYY8UOJ7fKIL3mFuDa2zyYPh0wNwfCwoClS8WOpuSwM7TDxf4X0atGL6RRGkYcH4Fe+3ohITlB7NAYY4yxPOPkVhlwcpsvhob/dS6bOVM+ggIrGDrqOtjaaSuWtVoGNRU1/HnnT9TbWA/339wXOzTGGGMsTzi5VQYaGv8tc6eyPOnTB2jQAPj4ERg9WuxoShaJRAK/+n44430GVnpWuPf6HupsqIPdd3eLHRpjjDGWK05ulYFEwp3K8klFBVi9Wv7vX39x57LC0LBcQ4T8HIImdk2QkJyArnu6YtTxUUhJSxE7NMYYYyxHnNwqC56lLN+cnIAhQ+TLw4Zx57LCYKFngZN9TmJcg3EAgKWXl6LZlmZ48eGFyJExxhhj2ePkVlnwLGVfZcYMeeey+/eBZcvEjqZkUlNRwzzPedjfbT8MNA1wIeoCav1WC+ciz4kdGmOMMZYFJ7fKgpslfBVDQ/mMZYA80eXOZYXHq4oXrg2QT9v76uMrNN/SHAsvLuThwhhjjCkVTm6VBc9S9tX69gXc3eWdy375RexoSrZKJpVwyfcS+tTsgzRKw9iAsfj+r+8RlxgndmiMMcYYAE5ulQfX3H61jJ3Ldu0CTp0SO6KSTUddB394/YF1362DhqoGDtw/ANcNrrj58qbYoTHGGGOc3CoN7lD2TZydgcGD5cvcuazwSSQS/Oz6My70u4By0nJ4+O4h6m+qjw3BG7iZAmOMMVFxcqssuEPZN5s5EzAzA0JDgeXLxY6mdKhTtg6u/3QdbSu1RWJqIn46/BN67++ND0kfxA6NMcZYKcXJrbLgZgnfLGPnsunTgefPRQ2n1DDRMcGhHoewwHMBVCWq2HF7B1w3uOLWq1tih8YYY6wU4uRWWXCHsgLh7Q24uXHnsqKmIlHBmAZjcM7nHKwNrPHg7QPU21iPmykwxhgrcpzcKguuuS0QGTuX7dwJnDkjdkSlS4NyDRDycwg3U2CMMSYaTm6VBXcoKzAuLsCgQfLlIUOAFJ4ttkiZ6pjiUI9DmO85n5spMMYYK3Kc3CoL7lBWoDJ2Llu8WOxoSh8ViQrGNhibpZnCxusbuZkCY4yxQsXJrbLgZgkFysgIWLRIvjx9OvDwobjxlFaZmykMODSAmykwxhgrVJzcKgvuUFbg+vQBPD3lL+nAgQBXGIoju2YKtdfXxvXo62KHxhhjrATi5FZZcM1tgZNIgHXr5H83nDoFbN0qdkSlV+ZmCuHvwlF/Y30svbSUmykwxhgrUJzcKgvuUFYoKlQApk2TL48aBbx+LWo4pV6Dcg1wc+BNeFXxQoosBaNOjEK7P9sh5mOM2KExxhgrITi5VRbcoazQjBoFODkBb9/Kl5m4jLWNsa/rPqxpuwaaqpr4J/wfOK1zwqnHp8QOjTHGWAnAya2y4GYJhUZdHdiwQd5MYds24MQJsSNiEokEg+oMQtCAIFQ1q4qXCS/RYmsLTAiYgJQ0HruNMcbY1+PkVllwh7JCVacOMHy4fHngQODTJ3HjYXI1LGogaEAQfq79MwiEeRfnoZF/I0S8jxA7NMYYY8UUJ7fKgmtuC93MmYCNDRAR8V87XCY+HXUdrGu3Dru77IahliGuPL8C59+csfPOTrFDY4wxVgxxcqssuENZodPXB9aulS8vWQKEhIgbD1P0Q9UfcOPnG2hg0wDxSfHosbcH+v/dHx+TP4odGmOMsWKEk1tlwR3KisR33wFduwJpacCAAfJ/mfKwNbTFWZ+zmNx4MiSQwP+GP2qtr4XgF8Fih8YYY6yY4ORWWXCzhCKzfDkglQLBwcDKlWJHwzJTU1HDjKYzcNr7NMrol8GDtw9Qf1N9zD0/F2ky/muEMcbYl3Fyqyy4Q1mRsbQEFi6UL0+aBDx5Im48LHtN7Jrg1sBb6OzYGamyVPx6+lc0/aMpnsTyG8YYYyxnnNwqC665LVK+vkDjxsDHj8DgwTw1r7Iy0THB7i674d/RH3oaejgfdR4119XE9lvbxQ6NMcaYkuLkVllwh7IipaIC/PYboKEB/PMP8NdfYkfEciKRSODj7IMbP99Afev6iE+KR+/9vdFzb0/EJsaKHR5jjDElw8mtsuAOZUWuShVg4kT58vDhwPv34sbDvqyCcQWc73ce0zymQVWiij/v/AmndU7498m/YofGGGNMiXByqyy4WYIoxo8HqlYFYmKAsWPFjoblRk1FDVObTMX5fudhb2SPqLgoNNncBBMCJiA5LVns8BhjjCkBTm6VBXcoE4WGBrB+vXx540bg7FlRw2F55Gbjhhs/30A/537CzGZum9xw/819sUNjjDEmMk5ulQXX3IqmQQP5lLyAvKPZR54zoFjQ19TH7x1/x54ue2CsbYzr0ddR67daWHV1FWQkEzs8xhhjIuHkVlmk19zKZEBqqrixlELz58un5n38GJgwQexoWH50rtoZtwbegqe9Jz6nfsawo8PQalsrPI17KnZojDHGRMDJrbJIr7kFuGmCCAwMgE2b5MsrV3LzhOKmrEFZHO99HCtar4C2mjYCHgegxtoa2HpzK4jHeWOMsVKFk1tlkTG55aYJomjRAvj5Z/ly//5AQoK48bD8UZGoYFi9Ybgx8Abqla2HuKQ49D3QF53/6ozXH1+LHR5jjLEiwsmtslBTA1RV5ctccyuahQsBW1sgIgIYN07saNjXcDBxwIX+FzCr6Syoqahh//39qL62Ov6+/7fYoTHGGCsCnNwqE+5UJjp9/f+aJ6xZA5w+LW487OuoqahhYuOJuPrjVVQ3r46YjzHw2uWFfn/3Q1xinNjhMcYYK0Sc3CoTnqVMKTRvDgwaJF/u3x/48EHceNjXc7FywbUB1zDWfSwkkGDzjc2oua4mzkScETs0xhhjhYSTW2XCs5QpjQULADs74MkTntyhuNNU08T8FvPxb79/hYkfmm1pBr+jfviU8kns8BhjjBUwTm6VCTdLUBp6eoC/v3x53TogIEDceNi3a1iuIW4OvImBteWDGq+4ugLO65xxMeqiyJExxhgrSJzcKhOepUypNGkCDB0qX/b1BeLjRQ2HFQA9DT2sbbcWR3sdRRn9Mgh/F45G/o0w6vgorsVljLESgpNbZcI1t0pn3jzA3h6IigJ++UXsaFhBaV2xNe4OvitM37v08lI4r3PGhagLYofGGGPsG3Fyq0y4Q5nS0dX9r3nChg3AiRPixsMKjqGWIX7v+DuO9DyCsvplEf4uHI39G2PksZFci8sYY8UYJ7fKhDuUKaXGjYHhw+XLvr5AHI8kVaK0rdQWdwbfQX/n/iAQll1ZBqd1TlyLyxhjxRQnt8qEmyUorTlzgAoVgGfPgNGjxY6GFTRDLUNs6rgJR3sdhbWBNR6+e4jG/o0x4tgIrsVljLFihpNbZcIdypRWevMEiUQ+ycPRo2JHxApD64qtcWfQf7W4y68sR821NXH+yXmxQ2OMMZZHX5XcymQyPHjwABcuXMC///6r8GDfgGtulVqjRoCfn3x5wAAgNlbUcFghkWpJFWpxH71/BI/NHvA76oeE5ASxw2OMMZaLfCe3ly9fRsWKFeHo6IjGjRujSZMmwqNp06aFEWPpwR3KlN7s2UClSsDz58CIEWJHwwpTei2ur4svCIQVV1eg+prqOP7wuNihMcYY+4J8J7cDBw6Eq6sr7ty5g3fv3uH9+/fC4927d4URY+nBHcqUno4OsHkzoKIC/PEHsGeP2BGxwiTVkmJjh4043vs47Azt8CTuCVpvbw3vA954++mt2OExxhjLRr6T2/DwcMyZMweOjo4wNDSEVCpVeLBvwM0SigV3d2D8ePnyTz/JO5mxkq1lhZa4Peg2/Or5QQIJttzcgqprqmLXnV0gIrHDY4wxlkG+k9t69erh4cOHhREL4w5lxca0aYCrK/D+PeDjA8hkYkfECpuehh6WtV6GQN9AVDWripiPMei+tzu8dnnhefxzscNjjDH2f/lObocNG4bRo0dj8+bNCA4Oxq1btxQe7BtwzW2xoa4ObN8ub6Zw6hSwdKnYEbGiUt+6Pq7/dB1TPaZCXUUdB8MOouqaqlgfvB4y4r9yGGNMbBLK529qKipZ82GJRAIigkQiQVpaWoEFV1Ti4+MhlUoRFxcHAwMD8QKZMQOYOhX4+Wdg3Trx4mB5tmGDvGmCujpw9Srg7Cx2RKwo3Ym5A9+Dvrj6/CoAwMPWAxvab0Alk0oiR8YYYyVPXvO1fNfcRkREZHk8fvxY+Jd9A+5QVuz8+CPQsSOQkgL07Al8/ix2RKwoVTevjsD+gVjaail01HVw7sk51FxXE/MvzEdKWorY4THGWKmU7+TW1tb2iw/2DbhZQrEjkQAbNwKWlkBoKDB2rNgRsaKmqqKKEfVH4M6gO/C090RiaiLGnxoP1w2uuPLsitjhMcZYqfNVkzg8evQIw4YNg6enJ1q0aIHhw4fj0aNHBR1b6cMdyoolU1P5sGAAsGoV8M8/4sbDxFHeqDxO9D4B/47+MNY2xq1Xt+C2yQ1D/xmKuMQ4scNjjLFSI9/J7fHjx1G1alVcvXoVNWvWRPXq1XHlyhVUq1YNJ0+eLIwYSw+uuS22Wrb8b/ayfv2AmBhx42HikEgk8HH2wf0h99HXqS8IhNVBq1F1TVXsvbeXhw1jjLEikO8OZS4uLmjVqhXmzZunsH78+PE4ceIErl+/XqABFgWl6VD255/yhpvNmsm74LNiJTERqFMHuHMHaNcOOHhQ3myBlV6nHp/CwCMD8fCdfPjEdg7tsLrtapSTlhM5MsYYK34KrUNZaGgofH19s6zv378/7t27l9/TsYy4Q1mxpqUF7NghfxsPH+YBLxjQ3L45bg+6jcmNJ0NdRR2HHxxG1dVVseTSEqTKUsUOjzHGSqR8J7dmZma4ceNGlvU3btyAubl5QcRUenGzhGKvRg0g/UeN0aOB+/fFjYeJT0tNCzOazsCNgTfQsFxDfEz5iNEnRqPuhrq49uKa2OExxliJk+/kdsCAAfjpp58wf/58nD9/HhcuXMC8efPw888/46effiqMGEsP7lBWIgwfDrRoIR8WrGdPIDlZ7IiYMqhqVhXnfM5hQ/sNMNQyRMjLENTbWA9+R/0QnxQvdniMMVZi5LvNLRFh2bJlWLx4MV68eAEAKFOmDMaMGYPhw4dDUgwbGSpNm9sLF4BGjYCKFYHwcPHiYN/sxQugZk3g7Vv58GDz54sdEVMmrxJeYdSJUdhxewcAwErPCktbLUXXal2L5XcoY4wVhbzma/lObjP68OEDAEBfX/9rT6EUlCa5vXZN3iPJxgaIihIvDlYgDhwAOnWSdyo7fRpo0kTsiJiyOfHoBIb8M0TocOZp74nVbVfDwcRB5MgYY0z5FFqHsoz09fWLfWKrVLhDWYni5SWfwYwI6NNHXovLWEYtK7TE7UG3Mb3JdGiqaiLgcQBqrK2Byacn43MKT3fHGGNfI081t7Vq1cKpU6dgZGQEFxeXL/5sxkOBfYMHD4DKlQEDAyCOB30vCRISgFq15K1MeHgw9iWP3j3C0KNDcezhMQBAecPyWNlmJb5z+E7kyBhjTDnkNV9Ty8vJOnbsCM3/1yp27NiR24QVFu5QVuLo6QF//QXUry8fHmzJEvkoCoxlVsG4Av7p+Q/2398Pv2N+iIiNQLs/28GriheWtVoGW0Oe3pwxxvLim9rclhRKU3P76hVgaSlflsm4iq8EWbcOGDQIUFMDzp+XJ7uM5SQhOQEzzs3A0stLkSpLhY66DqY0noKRbiOhoaohdniMMSaKQmtza29vj7fZNB6MjY2Fvb19fk/HMkqvuQV4/KgS5uefga5dgdRUoFs34N07sSNiykxPQw8LWixAyM8haFSuET6lfML4U+PhvM4ZpyNOix0eY4wptXwnt5GRkUhLS8uyPikpCc+ePSuQoEqt9A5lADdNKGEkEmDDBqBCBflAGP36yTuaMfYl1c2r45zPOWzx2gIzHTOEvglF8y3N0XV3V0TF8YgqjDGWnTw3Szh48CAAwMvLC3/88QekUqmwLS0tDadOncLJkycRFhZWOJEWIqVpliCTAaqq8uVXrwCe8a3ECQmRN0lITpa3vx05UuyIWHHx/vN7TD4zGWuvrYWMZNBR18GvDX/FaPfR0FLTyv0EjDFWzBX4OLcqKvJKXolEgsyHqKurw87ODosXL0a7du2+IWxxKE1yC8hrb5OTgSdPgHLlxI2FFYo1a4AhQ+Ttby9cAOrVEzsiVpzcfHkTw44Ow/mo8wCACkYVsKz1MrRzKH7fvYwxlh8F3uZWJpNBJpOhXLlyiImJEZ7LZDIkJSUhLCysWCa2Sie9aUJSkrhxsEIzaBDQpct/7W/fvxc7IlacOFk64ZzPOWz/fjvK6JfBo/eP0P7P9vhux3cIf8szGzLGWL7b3EZERMDU1LQwYmHAf53KOLktsTK2v33yhNvfsvyTSCToWaMn7g+5j7HuY6Guoo5/wv9B9bXV8eupX/Ex+aPYITLGmGjyndwOHz4cK1asyLJ+1apVGDFiREHEVLrxLGWlglQqH/9WQwP4+29g+XKxI2LFkb6mPua3mI/bg26jVYVWSE5LxtwLc1FldRXsurMrSxMyxhgrDfKd3O7duxcNGjTIst7d3R179uwpkKBKNW6WUGrUqiXvVAYAY8cCV6+KGw8rviqbVsbRXkdxoNsBlDcsj2fxz9B9b3c0/aMpbry8IXZ4jDFWpPKd3L59+1ZhpIR0BgYGePPmTYEEVarxLGWlyuDBwA8/ACkp3P6WfRuJRIKOVTri7uC7mN5kOrTUtHDuyTnU+q0Wfjr0E2I+xogdImOMFYl8J7cVK1bEsWPHsqw/evQoT+JQELjmtlSRSICNGwF7eyAyEujfn9vfsm+jra6NKR5TcH/IfXSr1g0EwobrG1BpZSUsClyE5DSeIIYxVrLlO7kdNWoUxo4di6lTp+LcuXM4d+4cpkyZgvHjx2MkD9r57bhDWamTsf3tgQPAypViR8RKAltDW+z8YSfO9zuP2la1EZ8UjzEnx6Dammo4FHaI2+MyxkqsfCe3/fv3x+LFi7Fp0yY0bdoUTZs2xbZt27B27VoMGDCgMGIsXbhDWalUuzawaJF8+ZdfuP0tKzgNyzXE1QFX8XuH32GpZ4mH7x6iw84OaLWtFe7G3BU7PMYYK3B5nsQhO69fv4a2tjb09PQKMqYip1STOLRpAxw7Bvj7Az4+4sbCihSRvP3tvn2AtTUQHMyT1LGC9SHpA+acn4Mll5cgOS0ZqhJVDHQdiOlNpsNEx0Ts8Bhj7IsKfBKH7JiZmRX7xFbpcIeyUksikf9NU7ky8OyZvINZaqrYUbGSRF9TH3M95yJ0SCi+d/weaZSG1UGrUXFlRSy/vBwpaSlih8gYY98s38ntq1ev0KdPH5QpUwZqampQVVVVeLBvxB3KSjUDA2D/fkBPDzh7Fhg3TuyIWElkb2SPvV334nTf06hpUROxibEYcXwEqq2phgP3D3B7XMZYsaaW3wN8fHwQFRWFyZMnw8rKChKJpDDiKr24Q1mp5+gI/PEH0LmzfBxcV1egRw+xo2IlUdPyTXH9p+vYFLIJk89MRvi7cHTa1Qketh5Y1HIRXMu4ih0iY4zlW77b3Orr6+P8+fNwdnYupJCKnlK1uf35Z2D9emD6dGDKFHFjYaL69Vdg7lxAWxu4fBmoWVPsiFhJFp8Uj/kX5mPJ5SVITJU3i+pdszfmNJsDG6mNyNExxlghtrm1sbHhn6wKEzdLYP83cybQsiXw+TPQqRNP8MAKl4GmAWY3n40HQx+gT80+AIBtt7bBYZUDJp6aiA9JH0SOkDHG8ibfye2yZcswfvx4REZGFkI4jDuUsXSqqsCOHYCdHfD4MdCrFyCTiR0VK+lspDbY0mkLrg24Bg9bDySmJmLOhTmouLIi1l1bh1QZ93JkjCm3fCe33bp1w9mzZ1GhQgXo6+vD2NhY4cG+EdfcsgxMTORDg2lpAUePAtOmiR0RKy1ql6mNM95ncKDbATiYOCDmYwwGHRkEp3VO+Cf8H/4FjzGmtPLdoWzZsmWFEAYTcIcylomLC7BhA9Cnj7ypgqsr0KGD2FGx0kAikaBjlY5oW6kt1l1bh+nnpuPe63v4bsd3aFa+GRZ4LkDtMrXFDpMxxhR80yQOJYVSdShbtAgYMwbo3RvYulXcWJhSGT5cPjWvgQEQFAQ4OIgdESttYhNjMef8HCy/shzJackAgO7Vu2NW01moYFxB5OgYYyVdoXUoi4qK+uKDfSNulsBysHgx0KgREB8v72D2gfv3sCJmqGWIBS0WCJ3OJJBg552dcFztiOFHh+P1x9dih8gYY/lPbu3s7FC+fPkcH+wbcYcylgN1deCvv4AyZYB794D+/eVT9jJW1GwNbbGl0xaE/ByCVhVaIUWWgpVXV6LCigqYeW4mPiZ/FDtExlgplu/kNiQkBNevXxceV65cwbp16+Dg4IDdu3cXRoylC9fcsi+wtAT27JEnunv2AAsXih0RK82cLJ1wrPcxBPQJQC2rWviQ/AFTzk5BxZUV8du133hkBcaYKAqsze2RI0ewcOFCnD17tiBOV6SUqs3tX38B3boBHh7y+VcZy8a6dcCgQYCKCnDsGNCihdgRsdJORjL8dfcv/HrqV0TERgAAKptUxtzmc+FVxYtns2SMfbNCa3ObEwcHBwQFBeXrGDs7O0gkkiyPIUOGZNn3559/hkQiyTJaQ1JSEoYNGwZTU1Po6uqiQ4cOePbs2bfcirjSa265WQL7gp9/ljdLkMnkfws9eCB2RKy0U5GooHv17rg/9D6Wt14OUx1ThL0Nw/d/fQ/3391xJuKM2CEyxkqJfCe38fHxCo+4uDjcv38fkydPRqVKlfJ1rqCgIERHRwuPkydPAgC6dOmisN+BAwdw5coVlClTJss5RowYgf3792Pnzp24cOECEhIS0K5dO6SlpeX31pQDN0tgeSCRAKtXA/Xry2cua9+eZzBjykFDVQPD6w3Ho+GPMLHRRGiraePys8totqUZWm5tiWsvrokdImOshMt3cmtoaAgjIyPhYWxsjKpVq+LSpUtYu3Ztvs5lZmYGS0tL4XH48GFUqFABHh4ewj7Pnz/H0KFDsX37dqirqyscHxcXh02bNmHx4sXw9PSEi4sLtm3bhtu3byMgICC/t6YcuEMZyyMtLeDAAcDGRl5z26ULkJIidlSMyRloGmBWs1l4NPwRhtQZAnUVdZx8fBJ1NtTBD3/9gNDXoWKHyBgrofKd3J45cwanT58WHmfPnsW9e/fw6NEjuLm5fXUgycnJ2LZtG/r37y+0zZLJZOjTpw/GjBmDatWqZTkmODgYKSkpaNmypbCuTJkyqF69OgIDA3O8VlJSUpYaaKXBNbcsHywsgEOHAF1d4NQpYMQIsSNiTJGVvhVWtV2F+0PvC8OH7Q3di+prq6P/3/3xJPaJ2CEyxkqYPCe3U6ZMwadPn+Dh4QEPDw/UrFkTHh4eaNSoEapUqQI1tXxPdqbgwIEDiI2NhY+Pj7Bu/vz5UFNTw/Dhw7M95uXLl9DQ0ICRkZHCegsLC7x8+TLHa82dOxdSqVR42NjYfFPsBYpnKGP55OQE7Nghb6qwZo28uQJjysbeyB5bOm3BrUG30LFyR8hIBv8b/nBY5QC/o36I+RgjdoiMsRIiz8nt7NmzkZCQIDy3tbXF48ePCyyQTZs2oU2bNkK72uDgYCxfvhybN2/Ody9bIvriMRMmTEBcXJzwePr06TfFXqC4Qxn7Ch06APPmyZf9/IATJ8SNh7GcVDevjgPdD+CS7yU0tWuK5LRkrLi6AvbL7TH59GTEJcaJHSJjrJjLc3KbecSwgpy198mTJwgICMCPP/4orDt//jxiYmJQrlw5qKmpQU1NDU+ePMHo0aNhZ2cHALC0tERycjLeZ+pJExMTAwsLixyvp6mpCQMDA4WH0uBmCewrjRkDeHsDaWlA167A/ftiR8RYzupb18epvqdwovcJuJZxxceUj5h1fhbKLy+PuefnIiE5IfeTMMZYNgpsKLBv4e/vD3Nzc3z33XfCuj59+uDWrVu4ceOG8ChTpgzGjBmD48ePAwBq164NdXV1YZQFAIiOjsadO3fg7u5e5PdRILhDGftKEgnw229AgwZAXBzQrh3w9q3YUTGWM4lEghYVWuDqj1exp8seVDGtgveJ7/Hr6V9hv9weiwMX43PKZ7HDZIwVM3lObiUSCT58+CAM/yWRSJCQkPDNHbNkMhn8/f3h7e2t0G7XxMQE1atXV3ioq6vD0tISlStXBgBIpVL4+vpi9OjROHXqFEJCQtC7d2/UqFEDnp6e+Y5FKaTX3KalyR+M5YOmJrB/P2BnBzx6BPzwA4+gwJSfRCJB56qdcWfQHWzx2oIKRhXw+tNr/HLyF9ivsMeqq6uQlMq/ZjHG8iZfzRIcHByE4b8SEhLg4uIiDAmWPkRYfgUEBCAqKgr9+/fP97EAsHTpUnh5eaFr165o0KABdHR0cOjQIaiqqn7V+USXXnMLcNME9lXMzOQjKOjpySe5GzoUKMBWRIwVGlUVVfRx6oPQIaHY2H4jbKW2eJnwEsOODkOllZWwPng9UtL4rzXG2Jflefrdc+fO5emEGceoLS6UavrdlBRAQ0O+/PYtYGwsbjys2DpyRD65AxGwfDmQw6AjjCmt5LRkbLq+CbPPz8bzD88BAOUNy2OKxxT0rtkbairfNkoPY6x4yWu+lufktiRTquSWCFBVlf/74gVgZSVuPKxYW7IEGD0aUFGRJ7utW4sdEWP5l5iaiN+u/Ya5F+bi1cdXAAAHEwdM9ZiKbtW6QVWlmP5SxxjLl7zma0rRoYxlIJFwpzJWYEaOBHx9AZkM6NYNuHdP7IgYyz8tNS341ffDo+GPsMBzAUy0TfDg7QP02tcL1ddWx5+3/0SajPsoMMbkOLlVRjwcGCsg6RM7NG4MxMfLR1B49UrsqBj7OroauhjTYAwi/CIwq+ksGGkZ4f6b++i5ryeqr62OHbd3cJLLGOPkVinxLGWsAGloAHv3AhUqABERwHffAQk8hCgrxvQ19TGx8UREjohUSHJ77euFamuqYfut7ZzkMlaKcXKrjHiWMlbATE2BY8fk/wYHy5sopKaKHRVj38ZA00BIcmc3mw1jbWOEvQ1D7/29UXVNVWy9uRWpMi7ojJU2X53cPnz4EMePH8fnz/IBtrlfWgHiZgmsEFSsCBw+DGhrA//8AwwezEOEsZLBQNMAvzb6FZF+kZjTbI7QJrfvgb6ouroqttzcwkkuY6VIvpPbt2/fwtPTEw4ODmjbti2io6MBAD/++CNGjx5d4AGWStyhjBWSevWAnTvloyds2ADMmSN2RIwVHH1NfUxoNAERfhGY23wuTLRNEP4uHN4HvOG42hGbb2zmcXIZKwXyndyOHDkSampqiIqKgo6OjrC+W7duOHbsWIEGV2pxzS0rRB06AKtWyZcnTQL++EPceBgraPqa+hjfcDwiR0RiXvN5MNUxxcN3D9Hv736otLIS1gatRWIqVx4wVlLlO7n9X3v3HR5Vtb59/Dup1IQSCITQpJcYOtJFulQBQUEBESsoKPajL+A5UuwFOyhNBZVepUuTDtIDUgOEKhBq6n7/WL80CJBAkj0zuT/Xta+Z2XuYPHGL3llZ61kLFy5k1KhRBAcHpzhfrlw5Dh8+nGGFZWtaUCaZ7Lnn4I03zPN+/WDRInvrEckMeXzy8HrD1zk48CDvN3+fwNyBHL5wmOfnPc89n93DJ399wuXoy3aXKSIZLN3h9vLlyylGbBOcOXMG34QRR7k7WlAmWeC996BnT7OwrEsX2LrV7opEMkcenzyJLcS+aPMFwX7BRFyK4OWFL1Pqs1KMWDmCyKhIu8sUkQyS7nDbuHFjJkyYkPja4XAQHx/PBx98QNOmTTO0uGxL0xIkC3h4wA8/wAMPwMWL8OCDcOSI3VWJZJ6c3jkZUGcA+1/cz/ftv+ee/Pdw5soZ3lr6FiU/LcmQZUM4e+Ws3WWKyF1Kd7j94IMP+Pbbb2nTpg3R0dG89tprVK1alRUrVjBq1KjMqDH70YIyySI+PjBtGlStChER0KYNnDtnd1UimcvH04d+NfoRNiCMiQ9NpFJAJc5fO8+7K96l5KcleW3Ra5y4dMLuMkXkDqU73FauXJlt27ZRp04dWrRoweXLl+ncuTNbtmyhTJkymVFj9qORW8lC/v6mNVixYmZ73k6d9K+eZA9eHl48du9j7Hh+B78//DvVilTjcsxlPljzAaU+LcXzc5/nwLkDdpcpIunksNSglsjISPz9/blw4QJ+fn52lwNPPml+Xzx8OLz5pt3VSDaxfTs0bGi26e3eHX7+2UxdEMkuLMti3r55/G/l/1h7dC0AHg4PHqn6CK83eJ17A++1uUKR7C2teS3d/+sqXbo077zzDmFhYXdVoNyCFpSJDUJCYPp08PaGKVPgtdfsrkgkazkcDtqWb8uavmtY3ns5rcq0It6K5+ftPxP6TSjtfm7HqiOr7C5TRG4j3eH2hRdeYMGCBVSqVImaNWvy6aefJm7kIBlE0xLEJg88AD/+aJ5/9BF88IG99YjYweFw0KRUExY8toDNT2+mW5VueDg8mLtvLo1+bETDHxoyd+9c7cwp4qTSHW5ffvllNmzYwJ49e2jXrh1ff/01JUqUoGXLlim6KMhd0IIysVHPnvD+++b5a6/BmDH21iNip+pFqzOl6xT29N/DUzWewsfTh9Xhq2n3SztCvwnl5+0/a2tfESdzxzPqypcvz7BhwwgLC2PlypWcPn2aJ554IiNry740cis2e/VVeP118/zpp+G33+ytR8Ru5QqW47v233Fw4EFeqfcKeXzysP3UdnpO60n5L8ozev1obQgh4iTuarnI+vXrGTRoEA899BBhYWF07do1o+rK3rRDmTiBESNMsLUsM5r7xx92VyRiv6C8QXzQ8gOODDrCf5v+l4BcARw8f5AX5r9AiU9L8P+W/T9OXT5ld5ki2Vq6w+3evXsZMmQI5cqVo0GDBuzatYuRI0dy8uRJpkyZkhk1Zj9aUCZOwOGAr74ynRNiYqBzZ1izxu6qRJxD/pz5ebvx2xwedJgvH/ySe/Lfw79X/+W/K/5LyU9L8tyc59h3dp/dZYpkS+kOtxUrVmT+/Pn079+f8PBwFi5cSO/evcmbN29m1Jc9aVqCOAlPT5gwwWzucOWK2cXs77/trkrEeeTyzsXztZ9n74C9/Nr1V2oH1eZa7DW+2fQNFUZXoMuvXRLbiolI1kh3uN2zZ0/idIQiRYpkRk2iBWXiRHx84PffoUEDuHABWrWCfRqQEknB08OTh6s8zLp+61jeezlty7XFwmLa7mnUG1uPRj82YnbYbOKteLtLFXF76Q635cuXz4w6JDmN3IqTyZUL5syBatXg5Elo0QKOHrW7KhHnk9BGbE6POex4bgdPVHsCbw9vVh1ZRYfJHajyVRW+3/Q9V2Ou2l2qiNtKU7gtUKAAZ86cASB//vwUKFDgpodkAC0oEyeULx8sWADlysHhw9CyJfzffxZEJBVVClfhh44/cHDgQV6r/xp+vn7sObOHp+c8TYlPSzBk2RBOXjppd5kibidN2++OHz+eRx55BF9fX8aNG4fD4bjpe3v37p2hBWYFp9t+d84caN8eatWCDRvsrkYkhcOHzTa9R4+af0WXLAFn+Gsj4uwioyIZu3ksn637jMMXDgPg4+nDYyGP8VK9l6hauKrNFYo4t7TmtTSFW3fndOF20SIzLBYSAtu22V2NyA327IFGjczI7f33w/z5Sb9wEJFbi42PZfru6Xy89uMUi81almnJy/e9TMsyLW85iCSSXaU1r6V7zq2npyenTt3Yw+/s2bN4enqm9+MkNVpQJk6uYkUzRSFvXli+PKldmIjcnpeHFw9XeZi/nvyLNX3X0LVyVzwcHizcv5DWP7Um5OsQxm4ey7VY/T9A5E6kO9zebKA3KioKHx+fuy5I0IIycQk1a8Ls2eZnsVmz4PHHIVa7kIqkS73i9fjt4d/454V/GFR3EHl88rDz9E76ze5HiU/MvNwTl07YXaaIS0nztITPP/8cgJdeeon//ve/5MmTJ/FaXFwcK1as4NChQ2zZsiVzKs1ETjctYds2CA2FwEA4of+oiXObOxceesiM3PbsCePHm/64IpJ+F65dYMzmMXy27jPCI8MB8PbwpnvV7gysO5BaQbVsrlDEPhk+57Z06dIAHD58mODg4BRTEHx8fChVqhTvvvsudevWvcvSs57ThduwMPN7X39/OH/e7mpEbmv6dOjWzYzc9uoFP/yggCtyN2LjY5m2exqfrfuMNeFJWwPWL16fgXUH8lDFh/D29LaxQpGsl2kLypo2bcq0adPInz//XRfpLJwu3B46BKVLm9/3XlUvRHENv/8OjzwCcXHQty98/z14pHvik4hcb8OxDXy+/nOm7JhCTLyZ3B7sF0z/2v15qsZTFMxV0OYKRbKGuiWkg9OF2xMnoGhR8zw+HrRqVlzElCnQo4f51/bpp+HrrxVwRTJKxMUIvtn4Dd9s+oZTl83C7hxeOXgs5DEG3jdQrcTE7WVat4SuXbsycuTIG85/8MEHPPzww+n9OElNwoIy0BJ0cSndu8PEiSbQfvcdvPAC6MdnkYxRNG9RhjUdxuFBhxnXcRzVi1TnWuw1xmwZQ8jXITww/gGm755ObLxWdkr2lu6R20KFCrF06VJCQkJSnN++fTvNmzfn5EnX223F6UZur141+50CREaafksiLmTCBOjTxwTbF1+ETz/VLyBEMpplWaw6sorP1n3G9D3TibfiASjuV5znaj1Hvxr9KJS7kM1VimScTBu5vXTpUqotv7y9vYmMjEzvx0lqko/cqtetuKBevWDsWPP8889h8GCN4IpkNIfDQaOSjfi92+8cHHiQNxu+SUCuAMIjw3lr6VsEfxJM7xm92XBMO11K9pLucFu1alWmTJlyw/nJkydTuXLlDCkq2/PwAC8v81y9bsVFPfGEmZoA8Mkn8PrrCrgimaWEfwmGNxtO+EvhjO80nlpBtYiOi2bC3xOoM6YOdcfUZeLfE7UxhGQL6Z6WMGvWLLp06UKPHj144IEHAFiyZAm//PILv/32G506dcqMOjOV001LADMV4dIl2LcPypa1uxqRO/bNN/Dcc+b5m2/Ce+9pioJIVlh/bD2j149mys4pRMdFA1AoVyGeqvEUz9Z6luL+xW2uUCR9MrVbwty5cxk+fDhbt24lZ86c3HvvvQwZMoQmTZrcVdF2ccpwGxAAZ8/Cjh1QpYrd1YjcldGjzeIygP/3/2DYMHvrEclOTl0+xdjNY/l649eJG0N4ODxoV74dz9V6jpZlWuLhUFsTcX5qBZYOThlug4Ph2DHYtAlq1LC7GpG79umn8NJL5vmQIebQCK5I1omNj2V22GxGbxjN0oNLE8/fk/8enqn5DH2r9yUgV4CNFYrcWqYtKAM4f/48Y8aM4a233uLff/8FYPPmzRw7duzOqpUbJSwq04IycRODBsGHH5rnw4aZKQr60Vok63h5ePFQpYdY0msJu/vvZmDdgfj7+nPg3AFeX/w6xT4uxmPTHmP1kdVo3EtcWbpHbrdt20bz5s3x9/fn0KFDhIWFcc899/DOO+9w+PBhJkyYkFm1ZhqnHLmtXBl274alS6FpU7urEckwyUdwX3jBvNZGDyL2uBJzhck7JvP1xq/ZeHxj4vmQwiE8V+s5Hrv3MfL6qh2lOIdMG7l9+eWX6dOnD/v27SNHjhyJ59u0acOKFSvurFq5UcI/W43cipsZNMgsMgP44gt45hmzZa+IZL1c3rnoW70vG57awPp+63mi2hPk9MrJ9lPbeX7e8wR9HMRzc55j64mtdpcqkmbpDrcbNmzgmWeeueF8sWLFOHHiRIYUJSRNS1ArMHFDzzwD48aZEdsxY8yGD7HaVEnEVrWL1eaHjj9w7OVjfNLqEyoUrMCl6Et8s+kbqn9bnTrf12HM5jFcir5kd6kit5TucJsjR45UN2sICwujUCHthJJhEkZuFW7FTfXuDb/8Ylo6T5oEjzwC0dF2VyUi+XPmZ9B9g9jdfzdLey2lW5VueHt4s+H4Bp6a/RRBH5nR3C0RW+wuVSRV6Q63HTt25N133yUmJgYwO6QcOXKEN954gy5dumR4gdmWFpRJNtCtG/z+O/j4wNSp0KWL/pUXcRYOh4OmpZsypesUjr58lPebv0/ZAmW5GH2RbzZ9Q43valD7+9oazRWnk+5w++GHH3L69GkKFy7M1atXadKkCWXLliVv3ry89957mVFj9qRpCZJNdOwIs2aZX1bMmQPt28Ply3ZXJSLJFc5dmFcbvErYgDCW9FpC9yrd8fbwZuPxjTw1+ymKflSUZ+c8y+aIzXaXKnLnfW6XLl3K5s2biY+Pp0aNGjRv3jyja8syTtktoXt3+PVX+PzzpO73Im5s+XJo184E20aNYO5cs1GfiDin05dPM/7v8Xy36Tv2/bsv8XyNojXoV70fj4Y8Sr4c+ewrUNyONnFIB6cMt716wcSJ8P778OqrdlcjkiX++gtat4bISKhTBxYsgPz57a5KRG7FsiyWH1rOd5u/Y9ruaYlb/ebwysHDlR/myepP0rhkYxzatUXuUlrzmldaPuzzzz/n6aefJkeOHHz++ee3fG+ePHmoUqUKdevWTV/FkpIWlEk2VK+eae3csiWsXw8PPAALF4LWqoo4r4S5uU1LN+XMlTNM2jaJMZvHsPP0TiZum8jEbRMpV6Acfav3pXdob4rmLWp3yeLm0jRyW7p0aTZu3EjBggUpXbr0Ld8bFRXFqVOneOmll/jggw8yrNDM5JQjty+8AKNHw3/+A//7n93ViGSp7duheXM4dQoqVTIBNzjY7qpEJK0sy2L9sfWM2TyGyTsnJy4483R40rZ8W/pV70ebcm3w8kjTGJsIYPO0hEWLFtGjRw9Onz6d0R+dKZwy3L7yCnz0kXl0kR8SRDJSWBg0awbHjkHx4ibgVqxod1Uikl6Xoi/x685fGbtlLGvC1ySeL5qnKL1De/NE9ScoX7C8jRWKq8i0HcrSomHDhrz99tuZ8dHZh6YlSDZXoQKsXm0ew8OhYUNYt87uqkQkvfL45KFv9b6s7ruaXc/vYnC9wRTKVYiISxGMXD2SCqMr0OCHBozZPIbIqBv76Iuk1x2F2yVLltCuXTvKlClD2bJladeuHYsXL068njNnTgYOHJhhRWZL6nMrQsmSsGoV1K4NZ8+aObh//GF3VSJypyoVqsSHLT/k6MtH+f3h32lbri0eDg/WhK/hqdlPUeTDIvSa3oulB5cSb8XbXa64qHSH29GjR9O6dWvy5s3LwIEDefHFF/Hz8+PBBx9k9OjRmVFj9qSRWxEAAgKSFplduWLahf3yi91Vicjd8PH0oUvlLszpMYejLx1lVPNRVAyoyNXYq0zcNpFmE5pR5vMyDF0+lEPnD9ldrriYdM+5LVasGG+++SYDBgxIcf7LL7/kvffe4/jx4xlaYFZwyjm3n38OAweaLZymTLG7GhHbRUebLXsnTzavP/sMXnzR3ppEJONYlsW6Y+v4ccuPTN45OcUUhaalmvJEtSfoXKkzuX1y21il2CnT5txGRkbSunXrG863bNmSyEjNlckw2qFMJAUfH/jpp6Q9TQYONM1E1KlbxD04HA7uC76Pb9t/S8TgCH7q/BPN72mOAwfLDi2j14xeBH4YSJ8ZfTRtQW4p3eG2Q4cOTJ8+/YbzM2fOpH379hlSlKBpCSKp8PAwI7YJ3fGGD4enn4bYWHvrEpGMlcs7Fz1CerDo8UUcHHiQd+9/lzL5y3A55jLj/x5PswnNKPVpKf6z5D+EnQmzu1xxMmmalpB844bIyEg+/PBDGjRoQL169QBYu3Ytq1evZvDgwS7ZJcEppyVMngyPPgr33w/LltldjYjT+f57ePZZiI+HTp3MPNyEnwlFxP1YlsVfR/9i/NbxTNk5hQtRFxKv1SlWh96hvelepTsFcxW0sUrJTBna5/Z2GzckfpjDwYEDB9JepZNwynA7YwY89JDZsmnNmtu+XSQ7mj7d/AwYFQVNmsDMmeDvb3dVIpLZrsVeY3bYbCZsm8D8ffOJs+IA8Pbwpl35dvQK7cWD5R7Ex9PH5kolI9m6iYOrccpwO38+PPggVK8OmzfbXY2I01q+HDp2hMhICA2FefMgKMjuqkQkq5y8dJJfdvzChL8nsOXElsTzBXIWoFvlbjx272PUL14fh8NhY5WSETI93J45cwaHw0HBgq4//O+U4XbpUrM9U+XKsHOn3dWIOLWtW6F1azh50mzTO28ehITYXZWIZLXtJ7czcdtEJm2bRMSliMTzpfOVpmdIT3re25OKAdrq0FVlSreE8+fP079/fwICAggMDKRw4cIEBAQwYMAAzp8/f7c1S3JaUCaSZtWqmdk7FSvC0aPQoIHZrldEspeQwBDeb/E+4S+Fs+jxRfQO7U0enzwcPH+Q/638H5W+rESt72rx6dpPOXHphN3lSiZJ88jtv//+S7169Th27Bg9e/akUqVKWJbF7t27+fnnnylevDhr1qwhf/78mV1zhnPKkdtNm6BWLShWzPzfWkRu69w56NzZTFXw9ISvv4annrK7KhGx05WYK8wOm82k7ZNY8M8CYuNNexUPhwct7mnBY/c+RqeKncjjk8fmSuV2MnxawqBBg1iyZAmLFy8mMDAwxbUTJ07QsmVLmjVrxieffHJ3ldvAKcPtzp1QtarZnun0aburEXEZ0dHQrx9MnGhev/66aRnmcUebjYuIOzl9+TS/7vyVn7b/xF9H/0o8n9MrJx0qdKBHSA9alWmFr5evjVXKzWR4uC1VqhTffvstrVq1SvX6ggULePbZZzl06NAdFWwnpwy3//wD5cpBnjxw8aLd1Yi4FMuCYcPMAWajv/Hj1SpMRJL88+8//Lz9ZyZtm8S+f/clns+XIx9dKnWhR0gPmpRsgqeHp41VSnIZHm59fX3Zv38/wcHBqV4/evQoZcuW5dq1a3dWsY2cMtyGh0OJEuDtbYaiRCTdJkwwo7gxMVC/vumwV6iQ3VWJiDOxLIvNEZv5efvPTN45meMXjydeK5qnKN2qdKNHSA9qB9VWxwWbZfiCsoCAgFuOyh48eNAtOic4jYQhppgY06VeRNKtVy+zsCxfPrPgrF492LvX7qpExJk4HA5qBtXko1YfcWTQEZb1XsZTNZ4if478RFyK4LN1n1F3TF3KfVGOt5e+za7Tu+wuWW4jzSO3Tz75JP/88w+LFi3CxydlU+SoqChatWpFmTJlGDt2bKYUmpmccuQ2MjKpG/2VK5Azp731iLiw3btN2+hDh6BAATOC26iR3VWJiDOLjovmj3/+4JcdvzAzbCZXYq4kXqtauCrdq3Sne5XulCtYzsYqs5cMn5Zw9OhRatWqha+vL/3796diRdMnbteuXXz11VdERUWxceNGihcvnjHfQRZyynAbHQ2+/zeh/dw5M/QkInfs5Eno0AHWrwcfH/jxR+jRw+6qRMQVXI6+zKywWfy842f++OcPYuJjEq9VL1KdR6o+Qrcq3SiVr5R9RWYDmbKJw8GDB3n++edZuHAhCX/M4XDQokULRo8eTdmyZe++chs4Zbi1rKTl3RERUKSIvfWIuIErV+Dxx2HaNPN66FB45x11UhCRtDt39RzT90xnys4pLDmwJHHrX4C6xerSvUp3ulXpRjG/YjZW6Z4ydYeyc+fOsW+fWVlYtmxZChQocOeVOgGnDLdg5t1GRZnfpZYsaXc1Im4hPh5eew0++si87tLFdFLIndveukTE9Zy+fJppu6cxeedk/jz0Jxb/N/CHg4YlGtK9Sne6VO5CkTwaoMoImb79rjtx2nCbLx9cuABhYVC+vN3ViLiVH36AZ581azZDQ2HmTP0MKSJ3LuJiBL/v+p0pO6ewOnx14nkHDhqVbMTDlR+mS6UuFM1b1MYqXZvCbTo4bbgNDIRTp+Dvv+Hee+2uRsTtrF5tdjQ7dcrslzJtmhaaicjdC78Qzm+7fuPXnb+y7ti6xPMJI7pdK3elS6UumrqQTgq36eC04bZkSThyxKyAqV3b7mpE3FJ4OHTqBJs3g5cXfPklPP203VWJiLs4cuEIv+/6nd92/cbao2tTXGtQvIEZ0a3chWC/1PcRkCQKt+ngtOG2fHnYtw9WrNBwkkgmunIF+vaFKVPM6/794ZNPzB4qIiIZJfxCOFN3T+W3Xb+xJnxNimv1i9enS6UudKnUhZL5NEcqNQq36eC04TYkBHbsgEWLoHlzu6sRcWuWBSNGwH/+Y143bQq//mqmK4iIZLSjkUeZussE3eRzdAFqFq1Jl0pd6FypMxUCKthUofNRuE0Hpw23tWvDxo0wZw60bWt3NSLZwqxZ0LMnXLoEpUubhWYhIXZXJSLu7FjkMabtnsbU3VNZeWQl8VbSzqRVClUxI7qVuxBSOCRbbwGscJsOThtuGzY0K15+/930KxKRLLFzp9nw4cAB0yJs0iQzL1dEJLOdunyKmXtmMnX3VJYcXEJsfGzitbIFytK5Yme6VO5C7aDa2S7oKtymg9OG2+bNYckS+OknbaUkksXOnoVu3WDpUvN62DB4+21t+CAiWefc1XPM2TuHqbun8sf+P7gWey3xWrBfMJ0qdKJTxU40LtkYb0/3XySgcJsOThtu27aFefNg7Fiz2kVEslRMDAweDF98YV63bQsTJ0L+/PbWJSLZz6XoS8zbN49pu6cxd99cLkVfSryWP0d+2ldoT6cKnWhVthW5vHPZWGnmUbhNB6cNt507w/Tp8NVX8Nxzdlcjkm2NG2f+Cl67ZubhTp0K1avbXZWIZFfXYq+x+MBiZuyZwaywWZy+cjrxWk6vnLQq24qHKj5Eu/LtKJDTtXeRTS6tec0rC2uS9MqRwzxGRdlbh0g216cPVKtmft48eBDq1TM/c+oXKiJihxxeOWhXvh3tyrcjLj6O1eGrmbFnBtP3TOfQ+UPM2DODGXtm4OnwpEmpJnSq0IkOFTpkmxZjGrnFiUdun3jCDBmNGAFvvGF3NSLZ3rlz8PjjMHeued2vn5mykPBzqIiInSzL4u+TfycG3W0nt6W4Xq1INTqU70DHih2pXqS6yy1I07SEdHDacPvss/DttzB0KAwZYnc1IgLEx5ufN995x/TGrVnTNDQpVcruykREUtr/735m7JnBzLCZrA5fnaLFWLBfcGLQvb/U/fh4+thYadoo3KaD04bbQYPgs8/MqO2IEXZXIyLJLFoEjz5quirkz2+amrRpY3dVIiKpO3PlDHP3zmXW3ln88c8fXI65nHgtr09e2pRrQ4fyHXiw3IPkz+mcq2bTmtfU1MaZ+fqaR825FXE6LVrA5s1mr5Vz50wnhaFDzciuiIizCcgVQO9qvZnabSpnXjvD3B5zebrG0xTJU4SL0Rf5deevPDb9MQp9UIim45vy0ZqP2Ht2r91l3xGN3OLEI7dDhsC778Lzz8OXX9pdjYikIioKXnoJvv7avG7d2mz6ULCgvXWJiKRFvBXPxuMbmblnJrP2zmLHqR0prpcvWJ525drRvkJ7GhRvYGs/XU1LSAenDbfDh5uN7vv2Nb1uRcRpTZwIzzwDV69CiRIwebLpqiAi4koOnDvAnL1zmLN3DssPLScmPibxWr4c+WhdtjXty7enTdk2WT59QeE2HZw23H70EbzyitnoftIku6sRkdv4+2+zU/b+/eDpCe+9B6++ql3NRMQ1RUZFsnD/QubsncPcfXM5c+VM4jVPhycNSjSgY4WOvHTfS1nSeUFzbt1BQn+ha9du/T4RcQqhoWYe7iOPQFycWQvapg2cPGl3ZSIi6efn60fXyl0Z12kcJwafYHXf1bzZ8E2qFq5KnBXHisMr+G3Xb07XUkybODgzLSgTcTl+fvDzz9C8ObzwAixcaELvpEnmnIiIK/L08KR+8frUL16f4c2Gc+j8IebsnUNArgC7S7uBRm6dmXYoE3FJDgc8+SRs3AhVq5qR25YtzRT62Fi7qxMRuXul8pViQJ0BPFL1EbtLuYHCrTNLGLnVtAQRl1S5MqxfD08/bTZ8GD4cmjSBI0fsrkxExH0p3DozTUsQcXk5c5qNBqdMMVMW1qwx0xSmT7e7MhER96Rw68y0oEzEbXTrBlu3Qp06cP48dO4MAwbor7eISEZTuHVmGrkVcSulS8PKlaY9GJi9We67D3bvtrcuERF3onDrzLSgTMTt+PjA++/D/PlQqJDpjVujBnzxhbbuFRHJCAq3zkwLykTcVuvWJti2amX+ir/4oumJe+yY3ZWJiLg2hVtnpmkJIm6taFEzgjt6tPlFzcKFEBICv/1md2UiIq5L4daZaUGZiNtzOKB/f9iyBWrWhHPnzOKzXr3gwgW7qxMRcT0Kt85MI7ci2UbFivDXX/D22+DhARMnwr33wooVdlcmIuJaFG6dWcLIbXy8tjUSyQa8veG//zUdFe65x2z2cP/98Npr+hlXRCStFG6dWcLILWhqgkg2Ur++6Yn75JNmZ7MPPoC6dWHHDrsrExFxfgq3zix5uNWwjUi2kjcvjBljdjILCDCdFWrWhA8/hLg4u6sTEXFeCrfOzMsLPD3Nc43cimRLnTqZEdu2bSE62mwA0aCBNn4QEbkZhVtnp0VlItleYCDMnm1Gcv38YN06qF4dRo7UdHwRkesp3Do77VImIpiWYU8+CTt3woMPmv8kvPkm1KunubgiIskp3Do77VImIskEB8OcOTBuHOTLBxs3mu1733sPYmLsrk5ExH4Kt85O0xJE5DoOB/TubUZx27c3ofbtt01HhW3b7K5ORMReCrfOTruUichNBAXBzJkwaRIUKJC0y9mwYWbxmYhIdqRw6+w0cisit+BwQM+eZhT3oYfMArOhQ6F2bdi82e7qRESynsKts9OCMhFJgyJFYOpUmDwZChY00xPq1DGtwy5ftrs6EZGso3Dr7LSgTETSyOGA7t1h1y7o1s1s9vDhh1ClCsybZ3d1IiJZQ+HW2WlagoikU+HCMGUKzJ0LJUvC4cNmE4ju3eHECburExHJXAq3zi5hWsKVK/bWISIu58EHzVzcwYPNZoe//goVK8K330J8vN3ViYhkDoVbZxcYaB413CIidyB3bjM1YcMGqFULLlyAZ5+FRo1M8BURcTcKt86uRAnzGB5ubx0i4tKqV4e1a+GzzyBPHlizxpx7+224etXu6kREMo7CrbNLCLdHjthbh4i4PE9PePFFs+CsY0ez+cN778G998LixXZXJyKSMRRunV3x4uZR4VZEMkjx4jBjBkybZjaC+OcfaNHCLDg7etTu6kRE7o7CrbNLPnJrWfbWIiJu5aGHYPduGDAAPDySFpyNGqUdzkTEddkabkuVKoXD4bjh6N+/PzExMbz++uuEhISQO3dugoKC6NWrF8ePH0/xGVFRUbzwwgsEBASQO3duOnTowFF3GnoIDjaPV6/C2bP21iIibsfPD774AjZtggYNzIYPb7wBISGwcKHd1YmIpJ+t4XbDhg1EREQkHosWLQLg4Ycf5sqVK2zevJl33nmHzZs3M23aNPbu3UuHDh1SfMagQYOYPn06kydPZtWqVVy6dIl27doRFxdnx7eU8XLkSOqYoKkJIpJJqlWDlSth/Hjzn5y9e6FVK+jSxfTJFRFxFQ7Lcp7fdQ8aNIg5c+awb98+HA7HDdc3bNhAnTp1OHz4MCVKlODChQsUKlSIiRMn0r17dwCOHz9O8eLFmTdvHq1atUrT142MjMTf358LFy7g5+eXod9ThqhTx/TxmTHDrAIREclEFy7A0KFmRDcuDnLmhLfegldeSWq9LSKS1dKa15xmzm10dDSTJk2ib9++qQZbgAsXLuBwOMiXLx8AmzZtIiYmhpYtWya+JygoiKpVq7JmzZqsKDtrqGOCiGQhf3/45BPYuhWaNDGzot55B6pWNbueiYg4M6cJtzNmzOD8+fP06dMn1evXrl3jjTfeoEePHolp/cSJE/j4+JA/f/4U7w0MDOTELTY9iIqKIjIyMsXh1NQxQURsULUqLFsGv/xiuirs3w/t2kH79rBvn93ViYikzmnC7dixY2nTpg1BQUE3XIuJieGRRx4hPj6er7766rafZVnWTUd/AUaMGIG/v3/iUTwhPDorjdyKiE0cDnjkEdizB159Fby8YM4cqFLFbOt7/rzdFYqIpOQU4fbw4cMsXryYfv363XAtJiaGbt26cfDgQRYtWpRijkWRIkWIjo7m3LlzKf7MqVOnCExYhJWKN998kwsXLiQe4c6++5fCrYjYLG9eeP992LYN2rQxG0B8/DGULQtffgmxsXZXKCJiOEW4/fHHHylcuDBt27ZNcT4h2O7bt4/FixdTsGDBFNdr1qyJt7d3YpcFgIiICHbs2EH9+vVv+vV8fX3x8/NLcTg1hVsRcRKVKsG8ebBgAVSubDoUDhhgdjmbN0/tuEXEfraH2/j4eH788Ud69+6Nl5dX4vnY2Fi6du3Kxo0b+emnn4iLi+PEiROcOHGC6P/rLu7v78+TTz7J4MGDWbJkCVu2bOGxxx4jJCSE5s2b2/UtZbyEcBsRYYZLRERs1qoV/P03fPUVBASYzSDatoXWrWHHDrurE5HszPZwu3jxYo4cOULfvn1TnD969CizZs3i6NGjVKtWjaJFiyYeyTshfPLJJ3Tq1Ilu3brRoEEDcuXKxezZs/H09MzqbyXzFCoEvr5mSOTYMburEREBzPzb554zi8teeQW8vc3GD6Gh5vzp03ZXKCLZkVP1ubWL0/e5BTOxbf9++PNPaNzY7mpERG6wfz+89hpMm2Ze+/nB22/Diy+an89FRO6Gy/W5ldvQvFsRcXJlysDUqeZn8Bo1IDLShN0KFWDiRLMhhIhIZlO4dRUKtyLiIho3Npsqjhtn+uMePgy9epnAq0VnIpLZFG5dhcKtiLgQDw/o3dvMxx050ux6tm2bWXTWtCmsW2d3hSLirhRuXUVCuHX2nrwiIsnkygWvvw4HDphNIHx9zbSF++6DLl3M5hAiIhlJ4dZVaORWRFxYgQJmE4h9+6BvXzOyO22a2eL36afVCEZEMo7CratQuBURN1C8OIwda6YodOxoFpl9/z2UKwdvvqntfEXk7incuorixc1jZCRcuGBvLSIid6lKFZgxA1atggYN4OpVMze3dGl47z24eNHuCkXEVSncuorcuc3v9UCjtyLiNho0gJUrYdYsE3jPnze9cUuXNtMYLl+2u0IRcTUKt65EUxNExA05HNC+vdnO9+efoXx5OHvWLES75x749FMzsisikhYKt65EHRNExI15esKjj8LOnaZH7j33wKlT8NJLZpPGL7+EqCi7qxQRZ6dw60o0cisi2YCXl+mRu2ePWWxWogQcPw4DBpiFZ999BzExdlcpIs5K4daVKNyKSDbi7Q39+pn2YV99BcWKmV9cPfOM2dL3xx8VckXkRgq3riShY4LCrYhkIz4+8Nxz8M8/8NlnEBgIBw+afrnly8O332q6gogkUbh1JRq5FZFsLEcOePFFs9vZBx9A4cJw6BA8+yyUKWOC75UrdlcpInZTuHUlCeH26FHT+VxEJBvKlQteecWM3n72mZmucOwYDBoEpUrBqFHqkyuSnSncupKiRc1y4rg4OHHC7mpERGyVK5cZyd2/30xNKFUKTp+GN96AkiVh2DA4d87uKkUkqyncuhJPTwgONs81NUFEBABfX3j6adi7F8aPN4vNzp2DoUNNyH3rLRN6RSR7ULh1NZp3KyKSKm9v6NXL9MmdMgVCQsz0hBEjTMh98UUzR1dE3JvCratRxwQRkVvy9IRu3WDrVpg5E2rVMjucffGF2QyiRw/YssXuKkUksyjcuhqN3IqIpImHB3ToAOvXw6JF0LKlWbLwyy9Qo4Z5vXgxWJbdlYpIRlK4dTUKtyIi6eJwQPPm8McfsHmzGbn19DSBt0ULE3R/+QViY+2uVEQygsKtq0kIt+Hh9tYhIuKCqleHn34yG0K8+KLpuLB1qwm85cqZqQuXL9tdpYjcDYVbV6ORWxGRu1aqlOmRe+QI/Pe/UKiQWWz24ovmP7Nvvw0REXZXKSJ3QuHW1SSE27NnNbwgInKXChY0QfbwYfj6a7Pg7N9/4b33TIeFxx+HTZvsrlJE0kPh1tX4+0PevOa5piaIiGSInDnNNr579sDUqdCwIcTEwKRJpttCo0bmvOblijg/hVtXpKkJIiKZwtMTOneGlSthwwZ47DHTP3fVKuja1YzsfvQRnD9vd6UicjMKt65I4VZEJNPVqgUTJ5q5uG+/DQEBZvrCK6+YzSJfeAH27bO7ShG5nsKtK1LHBBGRLBMUZBadHTkCY8ZA1apmycPo0VC+PLRtC/PnQ3y83ZWKCCjcuiaN3IqIZLmcOeHJJ2HbNrP5Q7t25vy8efDgg6aV2AcfmPW+ImIfhVtXpHArImIbhwOaNYPZs2HvXhg0yKz1PXAAXnvNTFl44gkzZ1dEsp7CrSsqXtw8KtyKiNiqXDn45BM4dsxMWaheHa5dg3HjoE4dqF3bPL961e5KRbIPhVtXlHzOrTZFFxGxXe7cZsrCpk3w11+my4KPD2zcaEZxixUzC9H277e7UhH3p3DriooVM78Xi4qC06ftrkZERP6PwwH33We6LBw9CiNHms0gzp0zLcTKloUWLeDXXyE62u5qRdyTwq0r8vGBokXNc01NEBFxSoUKweuvm9Ha2bOhdWsTfhcvhu7dzdzcV1+FsDC7KxVxLwq3rkqLykREXIKnp+msMH++Cbpvv23ai50+DR9+CBUrQpMm8NNPZr6uiNwdhVtXpXArIuJySpc2PXMPH4aZM03o9fCAFSvMPN2gIBg4EHbssLtSEdelcOuq1DFBRMRleXlBhw5musLhw/Duu0lzcz//HEJCoF4904EhMtLuakVci8Ktq9LIrYiIWwgOhnfeMVMWFiyAzp1N+F27Fp56CooUgccfhyVLtAuaSFoo3LoqbcErIuJWPD2hVSuYOtV0Whg1CipVMj1yJ02C5s3NtIaEICwiqVO4dVUauRURcVuBgWa3s507Yd06eO45yJfP/Cf/f/8zLcUaN4YffoCLF+2uVsS5OCxLuwBERkbi7+/PhQsX8PPzs7uctDlzxvSZAbO81tfX3npERCRTXbtmFqGNGwcLFyZNUciVC7p0gd694f77zQiwiDtKa15TuMVFw61lmS1xrl6Ff/6BMmXsrkhERLLIsWNmo4hx41L2yQ0KgkcfNZ0XQkNNX10Rd5HWvKZpCa7K4dDUBBGRbKpYMXjjDdi922z3+8wzkD8/HD9udkKrXh2qVoURI0w3BpHsROHWlakdmIhItpaw3e8330BEBEyfDl27mplqu3bBW29BqVJmfu6338K//9pdsUjmU7h1ZeqYICIi/8fXFzp1gt9+g5MnYexYeOABE4BXroRnnzVtxRLec+WK3RWLZA6FW1emaQkiIpIKf3/o29f0xj1yBD74wMzBjYkxi9K6dYPChaFHD/M6KsruikUyjsKtK1O4FRGR2wgOhldega1bYft2M1e3VCm4fBl++cWM5BYubLotzJsH0dE2FyxylxRuXZnCrYiIpEPCIrMDB0z/3JdfNuE3MhImTIC2bc3UhX79YNEiiI21u2KR9FMrMFy0FRjAvn1QvrxpCXbxonq+iIhIusXHw5o1MGVK0nzdBIUKmR66XbtCkyZmW2ARu6jPbTq4bLi9etV07wY4exYKFLC3HhERcWlxcbBihQm6U6ea/YISFCwIHTtC585mK2DtHSRZTeE2HVw23IKZKHX6tJlMFRpqdzUiIuImYmNh6VIzmjtjRsqg6+cH7dqZUd3WrZPGWUQykzZxyC4071ZERDKBlxe0bAnff2966C5dCv37Q9GiZo7uzz+bcBsQYB5//tmcF7Gbwq2rU7gVEZFM5uUFTZvC6NFw9CisXm0Wo5UsaWbITZsGPXuaOboPPmg2jDh+3O6qJbtSuHV1CrciIpKFPDygfn2zze/Bg7Bpk9kJrUIF00Zs/nyzYUSxYlC3Lrz3HuzYAZoEKVlF4dbVKdyKiIhNHA6oUcME2N27YedOGD7chFqA9evh7bchJATKljWjvX/+qRZjkrkUbl1d8eLmUeFWRERs5HBA5crw5puwdq2ZlvDtt2aagq+v6a37ySdw//0QGGg2jZg6VfN0JeOpWwIu3i1h3Tq47z4TchVwRUTECV26BAsXmq1+58yBf/9NuubtDY0amQ0k2rY17dvVtl1So1Zg6eDS4TYiAoKCzCSoqCh12BYREacWG2sWpM2cCXPnwt69Ka+XKZMUdJs0UT9dSaJwmw4uHW7j4yFHDoiJgcOHk+bgioiIuIB9+0zInTvXzMeNiUm6lju32TCibVszvaFYMfvqFPsp3KaDS4dbMD/mHjgAK1dCw4Z2VyMiInJHLl6ExYtN0J03z/xyMrmQEGjVymwc0bChRnWzG23ikJ2oY4KIiLiBvHnhoYdgzBg4dsy0GXv3XdN9weGA7dvhww/NaG6BAmaXtC++MKO/GqqTBJqg6Q7UMUFERNxMQpuxGjXgnXfM9r+LFsEff5jjxImk6QwApUubEd3Wrc2GE3nz2lu/2Efh1h0kjNyGh9tbh4iISCYJCIBHHzWHZcG2bbBggQm6q1aZDSW+/tocXl5Qr54Z4W3RAmrX1nrr7ETTEtyBpiWIiEg24nBAaCi8/josXWpai82aBc8/D/fcYzoyrFwJQ4aY3dQKFICOHc0Uht27NYXB3ennGHegcCsiItlYnjzQvr05APbvNwvTFi9OGX5nzTLXg4LMqG7z5tCsmXkt7kPdEnCDbgm7dkGVKpAvH5w7Z3c1IiIiTiMuDrZuTQq7K1eatvDJVapk5uk2bWp66xYqZEupchtqBZYOLh9uL16EhLovXEh6LiIiIilcvQpr1iSF3U2bbpymULVqyrBboIA9tUpKCrfp4PLhFiB/fjh/HnbsMKO4IiIiclv//ms2j1i+HJYtM+3GkkuY35sQdhs3Bn9/W0rN9hRu08Etwm1oqFk6On++6YMiIiIi6Xb6tAm7y5aZY/fulNcTwm7jxuZo1AgKF7an1uwmrXlNC8rcRYkSJtxqUZmIiMgdK1QIunY1B5h+usuXJ43s7t1r5vBu3Qqff27eU7FiUtBt3DhpnbfYQ+HWXahjgoiISIYrUgQeecQcYLYEXrkSVqwwj9u2wZ495vjuO/OekiWTwm6DBib8eqj5apZRuHUXCrciIiKZrmhR6NbNHGDm7K5ebcLuihVmgdrhwzBxojnALEirV88E3QYNzKYSOXPa9z24O4Vbd6FwKyIikuUKFEjZY/fSJfjrr6TR3fXrTQBOvlWwt7fZVjgh7DZoAIGB9n0P7kYLynCTBWWrVpnff5QuDQcO2F2NiIiIADExsGWLaT+2erU5IiJufF+ZMmZ0t149uO8+CAkxIViSqFtCOrhFuD1yxEzy8faGa9c0uUdERMQJWRYcOpQUdFevNl08r09jOXNCrVpJYfe++8yUiOxM4TYd3CLcxsaCry/Ex8Px4/obICIi4iLOn4e1a2HdOjOlYd06c+56JUqYkFuvHtStC9WqZa+5uwq36eAW4RbMv/Xh4eZvSN26dlcjIiIidyA+3rQcW7vWHH/9ZUZ34+NTvs/Ly0xfqFPHLFKrUwcqVwZPT3vqzmwKt+ngNuG2YUPz+41ff4WHH7a7GhEREckgFy/Cxo1JYXf9ejh58sb35c5tFqslD7ylSpnNJ1ydNnHIjkqUMOFWHRNERETcSt68SVsAg5mje/SoCbkbNpjHjRtNCF650hwJChaEmjWTjlq1TGRwh8CbGoVbd1K8uHkMD7e3DhEREclUDof5337x4tClizkXHw9hYSboJoTerVvh7FlYuNAcCa4PvDVrmnXp7hB4FW7dyT33mMeNG+2tQ0RERLKchwdUqmSO3r3Nuago2L7dbC6xcaN53LHj5oG3Rg3o0wd69LDlW8gQmnOLG825PXrU/J7BsmD//qSwKyIiIvJ/kgfehGP7dtOTF+C99+Ctt+ytMTWac5sdBQdDixbmx7AJE2DoULsrEhERESfj62vm3daqlXQueeBt0MC+2jKCOv27m4TfQ0yYcGPPEBEREZFUJATeZ56BqlXtrubuKNy6m06dzJLKgwfNlrwiIiIi2YjCrbvJlQu6dTPPx42ztRQRERGRrKZw644Spib89htcvmxvLSIiIiJZSOHWHTVsaDolXLoE06fbXY2IiIhIllG4dUcOB/TqZZ6PH29vLSIiIiJZSOHWXSWE2yVLtGOZiIiIZBsKt+6qdGlo3Nhs6DBpkt3ViIiIiGQJhVt31qePeRw/3oRcERERETencOvOunY1rcHCwmDdOrurEREREcl0CrfuLG9e6NzZPNfCMhEREckGFG7dXULP28mT4do1e2sRERERyWQKt+6uaVMIDobz52H2bLurEREREclUCrfuztMTHn/cPNfUBBEREXFzCrfZQcLUhAUL4ORJe2sRERERyUQKt9lBhQpQty7ExcFPP9ldjYiIiEimUbjNLhJGb8eNU89bERERcVsKt9nFI4+Ajw9s3w5bt9pdjYiIiEimULjNLvLnh44dzXMtLBMRERE3pXCbnSRMTfj5Z4iJsbcWERERkUygcJudtGoFgYFw+jTMn293NSIiIiIZTuE2O/Hygp49zXNNTRARERE3pHCb3SRMTZg9G86etbcWERERkQymcJvd3HsvVKtm5tz+8ovd1YiIiIhkKIXb7Chh9FZTE0RERMTNKNxmRz16mPm3GzfCrl12VyMiIiKSYRRus6PCheHBB81zjd6KiIiIG1G4za4SpiaMGQN799pbi4iIiEgGUbjNrtq1gxo14N9/oUULOHrU7opERERE7prCbXbl42M2cihXDo4cgZYt4cwZu6sSERERuSsKt9lZ4cKwaBEUKwa7d0ObNnDxot1ViYiIiNwxhdvsrmRJE3ALFjTdEzp2hGvX7K5KRERE5I4o3ApUqgQLFkCePLBsGTzyCMTG2l2ViIiISLop3IpRqxbMmgW+vjBzJjz1FMTH212ViIiISLoo3EqSpk1hyhTw9IRx42DwYLAsu6sSERERSTOFW0mpY0f44Qfz/NNP4b33bC1HREREJD0UbuVGvXqZYAvwzjvw5Ze2liMiIiKSVgq3krqBA2HIEPN8wAD4+Wd76xERERFJA1vDbalSpXA4HDcc/fv3B8CyLIYOHUpQUBA5c+bk/vvvZ+fOnSk+IyoqihdeeIGAgABy585Nhw4dOKrdtjLGkCHwwgvmee/eMHeuvfWIiIiI3Iat4XbDhg1EREQkHosWLQLg4YcfBuD999/n448/ZvTo0WzYsIEiRYrQokULLibbaGDQoEFMnz6dyZMns2rVKi5dukS7du2Ii4uz5XtyKw6HmZ7w2GOmNVjnzvDKK2bLXhEREREn5LAs51kOP2jQIObMmcO+ffsACAoKYtCgQbz++uuAGaUNDAxk1KhRPPPMM1y4cIFChQoxceJEunfvDsDx48cpXrw48+bNo1WrVmn6upGRkfj7+3PhwgX8/Pwy55tzZTEx0LMn/Pabee3vD2++CS++CDlz2lubiIiIZAtpzWtOM+c2OjqaSZMm0bdvXxwOBwcPHuTEiRO0bNky8T2+vr40adKENWvWALBp0yZiYmJSvCcoKIiqVasmvic1UVFRREZGpjjkFry9TYuwefMgJAQuXIA33oBy5WDsWG34ICIiIk7DacLtjBkzOH/+PH369AHgxIkTAAQGBqZ4X2BgYOK1EydO4OPjQ/78+W/6ntSMGDECf3//xKN48eIZ+J24KYcD2rSBLVtgwgQoUQKOHYN+/SA01GwA4Ty/BBAREZFsymnC7dixY2nTpg1BQUEpzjscjhSvLcu64dz1bveeN998kwsXLiQe4eHhd154duPpCY8/DmFh8NFHUKAA7Npl+uM2agSrV9tdoYiIiGRjThFuDx8+zOLFi+nXr1/iuSJFigDcMAJ76tSpxNHcIkWKEB0dzblz5276ntT4+vri5+eX4pB0ypEDXn4Z9u83829z5jTBtmFD6NQJdu+2u0IRERHJhpwi3P74448ULlyYtm3bJp4rXbo0RYoUSeygAGZe7p9//kn9+vUBqFmzJt7e3ineExERwY4dOxLfI5ksXz4YPhz27TNTFDw8YOZMqFoVHngAvv4abjFFRERERCQj2R5u4+Pj+fHHH+nduzdeXl6J5x0OB4MGDWL48OFMnz6dHTt20KdPH3LlykWPHj0A8Pf358knn2Tw4MEsWbKELVu28NhjjxESEkLz5s3t+payp2LF4PvvYccOM0UhPh6WLYPnn4egILj/frPTWUSE3ZWKiIiIG/O6/Vsy1+LFizly5Ah9+/a94dprr73G1atXef755zl37hx169Zl4cKF5M2bN/E9n3zyCV5eXnTr1o2rV6/SrFkzxo0bh6enZ1Z+G5KgUiWYMQMOHICpU037sA0b4M8/zfHCC2bqQteu0KWLCcUiIiIiGcSp+tzaRX1uM9nhw/D77+ZYuzbltfr14eGHoXVrqFDBdGUQERERuU5a85rCLQq3WSo83Izo/v77jZ0VAgKgQQMzstugAdSsCT4+9tQpIiIiTkXhNh0Ubm1y7BhMmwbTp8Nff8G1aymv58gBdeqYsNuwIdSrZxawiYiISLajcJsOCrdOIDrabBCxalXSceZMyvc4HKYLw333mY0j7r3XHP7+9tQsIiIiWUbhNh0Ubp2QZcHevSnD7j//pP7eUqWSwm5oqDnuuce0JRMRERG3oHCbDgq3LuLECTNPd/Nm+Ptvcxw9mvp7c+eGkBATeCtUMEf58lC6NHjZ3iRERERE0knhNh0Ubl3Y2bOwfXtS2N22zfTajYpK/f1eXlCmTFLYTf5YuLC6NYiIiDgphdt0ULh1M7GxZkpDQtDduzfpuHr15n/Oz89MZyhd2kx1KF065fPcubPqOxAREZHrKNymg8JtNhEfbzo0hIWZoJv88dAhM8/3VgoVShl2S5SA4sUhONgcAQEa+RUREckkCrfpoHArXLtmdlU7eDDpOHQo6fn587f/DF/fpKCbPPQWL252YitSBAIDNedXRETkDqQ1r+n/siJgeupWrmyO1Jw/nzLsHjxoNqQ4etQcJ0+aeb7795vjZhwOMwJcpAgULZr0mPx5kSJm/q+fn0aCRURE0kkjt2jkVjJAVBQcP54Udo8eTQq/4eHm2smTEBeX9s/08TFBuHBhc9zsecGC5vD3VxgWERG3pZFbkazk65u0AO1m4uPNxhQREaatWUREyufJHy9dMhtbHDtmjrTw8oICBZLCbsIREJD0vEAByJ8/5ZEnj0KxiIi4DYVbkazi4ZE02hoaeuv3Xr0Kp0/DqVPmSP78+tdnz8KVK6ZLRMK59PDyMtsaJw+8Ca/9/VM/8uVLep43rzbMEBERp6FwK+KMcuY03RhKlEjb+69eNSH3ZseZM+bx3LmUR3S0CcVnzty43XFaORwm4Pr5pe0x4ciTJ+kx+eHjo5FkERG5Ywq3Iu4gZ86k7gxpZVkmFF8feBOO8+fhwoVbH1FR5nMiI82REby8Uobe3LnTd+TKdfMjZ07w9MyYOkVExCkp3IpkVw5HUugrVuzOPuPataSge/GiOSIjkx6TP09+7tKlG49r18xnxsYmBezM4OubFHSTH6mdu/7IkcMcyZ+n9jr54eur0WgRkSykcCsidy4hwAUG3v1nxcbeGHgvXoTLl9N3XL1q5iAnP5LvTBcVZY7MCs83kzzsXh9+03v4+KR8TO1c8sebHRrFFhE3pHArIs4hYWFbvnwZ/9nx8WZkOLXQm5bjyhXz5xOOq1dv/fzqVYiJSVlDwnuciYdH6qHX2zttr7290/78Tg8vr1s/14i4iFxH4VZE3J+HR9IUjKwSH28W7CWE2qioG58nf0zPER2d+uP1z2NiUr4nNvbGGp0xdKeHp2dS0E3P4+3OXX/c7PytjoTabnft+vfd7Nr1zxXsRVKlcCsikhk8PJKmHjiL+PikwJv8SAi/ya/d6nlCcE44Es6n9vr6azc7Et4XG3vjtYRzqe05FBdnjqiorP/naTcPj5Sh91aPtzt3/fO0vL7ZuVudv9v3enqa7zujznt46IcEN6RwKyKSXXh4JM3RdUVxcTcG3usfb3UtNjbpuNXrmJikr5X8PTc7Et5/s+vJryV/7/V/JvnrhK9/q10NE347IHcnefjNzOfJH1M7d6ePd3LudtcrV4aKFe2+M3dM4VZERFxDQlhwptHwzGZZJsSmFohTC8fXvy+1x5udu9l7bvb6Vudv9t70vuf6I+GfRXrO3058fNJvNcQYNgz+3/+zu4o7pnArIiLirByOpFDv42N3Na7HssyRlkCc/HVGPU94nXAutfddfy75+evfk5HnbvU8rRsIOSmFWxEREXFPDoc5PDzMokDJFrQhvIiIiIi4DYVbEREREXEbCrciIiIi4jYUbkVERETEbSjcioiIiIjbULgVEREREbehcCsiIiIibkPhVkRERETchsKtiIiIiLgNhVsRERERcRsKtyIiIiLiNhRuRURERMRtKNyKiIiIiNtQuBURERERt6FwKyIiIiJuQ+FWRERERNyGwq2IiIiIuA2FWxERERFxGwq3IiIiIuI2FG5FRERExG0o3IqIiIiI21C4FRERERG3oXArIiIiIm5D4VZERERE3IbCrYiIiIi4DS+7C3AGlmUBEBkZaXMlIiIiIpKahJyWkNtuRuEWuHjxIgDFixe3uRIRERERuZWLFy/i7+9/0+sO63bxNxuIj4/n+PHj5M2bF4fDkelfLzIykuLFixMeHo6fn1+mfz3JeLqHrk/30LXp/rk+3UPXl9X30LIsLl68SFBQEB4eN59Zq5FbwMPDg+Dg4Cz/un5+fvoL7eJ0D12f7qFr0/1zfbqHri8r7+GtRmwTaEGZiIiIiLgNhVsRERERcRsKtzbw9fVlyJAh+Pr62l2K3CHdQ9ene+jadP9cn+6h63PWe6gFZSIiIiLiNjRyKyIiIiJuQ+FWRERERNyGwq2IiIiIuA2FWxERERFxGwq3Nvjqq68oXbo0OXLkoGbNmqxcudLukiQVK1asoH379gQFBeFwOJgxY0aK65ZlMXToUIKCgsiZMyf3338/O3futKdYSdWIESOoXbs2efPmpXDhwnTq1ImwsLAU79F9dF5ff/019957b2KD+Hr16jF//vzE67p3rmfEiBE4HA4GDRqUeE730bkNHToUh8OR4ihSpEjidWe8fwq3WWzKlCkMGjSI//znP2zZsoVGjRrRpk0bjhw5Yndpcp3Lly8TGhrK6NGjU73+/vvv8/HHHzN69Gg2bNhAkSJFaNGiBRcvXsziSuVm/vzzT/r378/atWtZtGgRsbGxtGzZksuXLye+R/fReQUHBzNy5Eg2btzIxo0beeCBB+jYsWPi/zh171zLhg0b+O6777j33ntTnNd9dH5VqlQhIiIi8di+fXviNae8f5ZkqTp16ljPPvtsinMVK1a03njjDZsqkrQArOnTpye+jo+Pt4oUKWKNHDky8dy1a9csf39/65tvvrGhQkmLU6dOWYD1559/Wpal++iK8ufPb40ZM0b3zsVcvHjRKleunLVo0SKrSZMm1sCBAy3L0t9BVzBkyBArNDQ01WvOev80cpuFoqOj2bRpEy1btkxxvmXLlqxZs8amquROHDx4kBMnTqS4l76+vjRp0kT30olduHABgAIFCgC6j64kLi6OyZMnc/nyZerVq6d752L69+9P27Ztad68eYrzuo+uYd++fQQFBVG6dGkeeeQRDhw4ADjv/fOy7StnQ2fOnCEuLo7AwMAU5wMDAzlx4oRNVcmdSLhfqd3Lw4cP21GS3IZlWbz88ss0bNiQqlWrArqPrmD79u3Uq1ePa9eukSdPHqZPn07lypUT/8epe+f8Jk+ezKZNm9i4ceMN1/R30PnVrVuXCRMmUL58eU6ePMn//vc/6tevz86dO532/inc2sDhcKR4bVnWDefENeheuo4BAwawbds2Vq1adcM13UfnVaFCBbZu3cr58+eZOnUqvXv35s8//0y8rnvn3MLDwxk4cCALFy4kR44cN32f7qPzatOmTeLzkJAQ6tWrR5kyZRg/fjz33Xcf4Hz3T9MSslBAQACenp43jNKeOnXqhp96xLklrBTVvXQNL7zwArNmzWLZsmUEBwcnntd9dH4+Pj6ULVuWWrVqMWLECEJDQ/nss89071zEpk2bOHXqFDVr1sTLywsvLy/+/PNPPv/8c7y8vBLvle6j68idOzchISHs27fPaf8eKtxmIR8fH2rWrMmiRYtSnF+0aBH169e3qSq5E6VLl6ZIkSIp7mV0dDR//vmn7qUTsSyLAQMGMG3aNJYuXUrp0qVTXNd9dD2WZREVFaV75yKaNWvG9u3b2bp1a+JRq1YtevbsydatW7nnnnt0H11MVFQUu3fvpmjRos7799C2pWzZ1OTJky1vb29r7Nix1q5du6xBgwZZuXPntg4dOmR3aXKdixcvWlu2bLG2bNliAdbHH39sbdmyxTp8+LBlWZY1cuRIy9/f35o2bZq1fft269FHH7WKFi1qRUZG2ly5JHjuuecsf39/a/ny5VZERETiceXKlcT36D46rzfffNNasWKFdfDgQWvbtm3WW2+9ZXl4eFgLFy60LEv3zlUl75ZgWbqPzm7w4MHW8uXLrQMHDlhr16612rVrZ+XNmzcxtzjj/VO4tcGXX35plSxZ0vLx8bFq1KiR2JZInMuyZcss4Iajd+/elmWZFihDhgyxihQpYvn6+lqNGze2tm/fbm/RkkJq9w+wfvzxx8T36D46r759+yb+t7JQoUJWs2bNEoOtZeneuarrw63uo3Pr3r27VbRoUcvb29sKCgqyOnfubO3cuTPxujPeP4dlWZY9Y8YiIiIiIhlLc25FRERExG0o3IqIiIiI21C4FRERERG3oXArIiIiIm5D4VZERERE3IbCrYiIiIi4DYVbEREREXEbCrciIjY4dOgQDoeDrVu32l1Koj179nDfffeRI0cOqlWrZnc5IiJ3ROFWRLKlPn364HA4GDlyZIrzM2bMwOFw2FSVvYYMGULu3LkJCwtjyZIl6f7zffr0oVOnThlfmIhIOijciki2lSNHDkaNGsW5c+fsLiXDREdH3/Gf3b9/Pw0bNqRkyZIULFgwA6sSEck6Crcikm01b96cIkWKMGLEiJu+Z+jQoTf8iv7TTz+lVKlSia8TRiyHDx9OYGAg+fLlY9iwYcTGxvLqq69SoEABgoOD+eGHH274/D179lC/fn1y5MhBlSpVWL58eYrru3bt4sEHHyRPnjwEBgby+OOPc+bMmcTr999/PwMGDODll18mICCAFi1apPp9xMfH8+677xIcHIyvry/VqlVjwYIFidcdDgebNm3i3XffxeFwMHTo0FQ/5/fffyckJIScOXNSsGBBmjdvzuXLlxk6dCjjx49n5syZOBwOHA5H4vdy7NgxunfvTv78+SlYsCAdO3bk0KFDN/zzGzZsGIULF8bPz49nnnkmRVC/2dcVEbmewq2IZFuenp4MHz6cL774gqNHj97VZy1dupTjx4+zYsUKPv74Y4YOHUq7du3Inz8/69at49lnn+XZZ58lPDw8xZ979dVXGTx4MFu2bKF+/fp06NCBs2fPAhAREUGTJk2oVq0aGzduZMGCBZw8eZJu3bql+Izx48fj5eXF6tWr+fbbb1Ot77PPPuOjjz7iww8/ZNu2bbRq1YoOHTqwb9++xK9VpUoVBg8eTEREBK+88soNnxEREcGjjz5K37592b17N8uXL6dz585YlsUrr7xCt27daN26NREREURERFC/fn2uXLlC06ZNyZMnDytWrGDVqlXkyZOH1q1bpwivS5YsYffu3SxbtoxffvmF6dOnM2zYsNt+XRGRG1giItlQ7969rY4dO1qWZVn33Xef1bdvX8uyLGv69OlW8v80DhkyxAoNDU3xZz/55BOrZMmSKT6rZMmSVlxcXOK5ChUqWI0aNUp8HRsba+XOndv65ZdfLMuyrIMHD1qANXLkyMT3xMTEWMHBwdaoUaMsy7Ksd955x2rZsmWKrx0eHm4BVlhYmGVZltWkSROrWrVqt/1+g4KCrPfeey/Fudq1a1vPP/984uvQ0FBryJAhN/2MTZs2WYB16NChVK8n/2eaYOzYsVaFChWs+Pj4xHNRUVFWzpw5rT/++CPxzxUoUMC6fPly4nu+/vprK0+ePFZcXNxtv66ISHIauRWRbG/UqFGMHz+eXbt23fFnVKlSBQ+PpP+kBgYGEhISkvja09OTggULcurUqRR/rl69eonPvby8qFWrFrt37wZg06ZNLFu2jDx58iQeFStWBMz82AS1atW6ZW2RkZEcP36cBg0apDjfoEGDxK+VFqGhoTRr1oyQkBAefvhhvv/++9vOV960aRP//PMPefPmTfweChQowLVr11J8D6GhoeTKlSvxdb169bh06RLh4eF39HVFJPtSuBWRbK9x48a0atWKt95664ZrHh4eN/z6OyYm5ob3eXt7p3jtcDhSPRcfH3/behK6NcTHx9O+fXu2bt2a4ti3bx+NGzdOfH/u3Llv+5nJPzeBZVnp6gzh6enJokWLmD9/PpUrV+aLL76gQoUKHDx48KZ/Jj4+npo1a97wPezdu5cePXqkqeY7+boikn0p3IqIACNGjGD27NmsWbMmxflChQpx4sSJFAE3I3vTrl27NvF5bGwsmzZtShydrVGjBjt37qRUqVKULVs2xZHWQAvg5+dHUFAQq1atSnF+zZo1VKpUKV31OhwOGjRowLBhw9iyZQs+Pj5Mnz4dAB8fH+Li4lK8v0aNGuzbt4/ChQvf8D34+/snvu/vv//m6tWria/Xrl1Lnjx5CA4Ovu3XFRFJTuFWRAS499576dmzJ1988UWK8/fffz+nT5/m/fffZ//+/Xz55ZfMnz8/w77ul19+yfTp09mzZw/9+/fn3Llz9O3bF4D+/fvz77//8uijj7J+/XoOHDjAwoUL6du37w0h8nZeffVVRo0axZQpUwgLC+ONN95g69atDBw4MM2fsW7dOoYPH87GjRs5cuQI06ZN4/Tp04kBuVSpUmzbto2wsDDOnDlDTEwMPXv2JCAggI4dO7Jy5UoOHjzIn3/+ycCBA1Ms4ouOjubJJ59k165dzJ8/nyFDhjBgwAA8PDxu+3VFRJJTuBUR+T///e9/b5iCUKlSJb766iu+/PJLQkNDWb9+faqdBO7UyJEjGTVqFKGhoaxcuZKZM2cSEBAAQFBQEKtXryYuLo5WrVpRtWpVBg4ciL+/f4r5vWnx4osvMnjwYAYPHkxISAgLFixg1qxZlCtXLs2f4efnx4oVK3jwwQcpX748b7/9Nh999BFt2rQB4KmnnqJChQrUqlWLQoUKsXr1anLlysWKFSsoUaIEnTt3plKlSvTt25erV6/i5+eX+NnNmjWjXLlyNG7cmG7dutG+ffvEdmS3+7oiIsk5rOv/Sy4iIpKF+vTpw/nz55kxY4bdpYiIG9DIrYiIiIi4DYVbEREREXEbmpYgIiIiIm5DI7ciIiIi4jYUbkVERETEbSjcioiIiIjbULgVEREREbehcCsiIiIibkPhVkRERETchsKtiIiIiLgNhVsRERERcRsKtyIiIiLiNv4/RzpGyIDFl4gAAAAASUVORK5CYII=\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 8))\n",
    "plt.xlabel('Number of steps')\n",
    "plt.ylabel('Objective Function')\n",
    "#plt.yscale(\"log\")\n",
    "plt.plot(range(len(gradient_objectives)), gradient_objectives,'r', label='gradient descent with 1/L stepsize')\n",
    "plt.plot(range(len(bd_gradient_objectives)), bd_gradient_objectives,'b', label='gradient descent assuming bounded gradients')\n",
    "plt.plot(range(len(bd_gradient_objectives_averaged)), bd_gradient_objectives_averaged,'g', label='gradient descent assuming bounded gradients with averaged iterates')\n",
    "plt.legend(loc='upper right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.13"
  },
  "widgets": {
   "state": {
    "d2b2c3aea192430e81437f33ba0b0e69": {
     "views": [
      {
       "cell_index": 22
      }
     ]
    },
    "e4a6a7a70ccd42ddb112989c04f2ed3f": {
     "views": [
      {
       "cell_index": 18
      }
     ]
    }
   },
   "version": "1.2.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
